用PreferenceFragment配置switchPreference,且獲取其開關狀態


MainActivity.java
res/xml/my_prefer.xml
res/layout/activity_main.xml
MainActivity.java如下:
package com.example.srx.myapplication;

import android.preference.Preference;
import android.preference.SwitchPreference;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.util.Log;

import java.util.prefs.PreferenceChangeEvent;
import java.util.prefs.PreferenceChangeListener;

public class MainActivity extends AppCompatActivity{
    private String TAG = "SrxPre";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

     // public static class MyPreferenceFra extends PreferenceFragment{
       public static class MyPreferenceFra extends PreferenceFragment implements Preference.OnPreferenceClickListener,Preference.OnPreferenceChangeListener{
        private String TAG = "SrxPre";
        private SwitchPreference mSwitchPreference;
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.my_prefer);
            mSwitchPreference = (SwitchPreference) findPreference("pre_key");
            mSwitchPreference.setOnPreferenceClickListener(this);
            mSwitchPreference.setOnPreferenceChangeListener(this);
        }

        @Override
        public boolean onPreferenceClick(Preference preference) {
            Log.e(TAG,"srx--onpreferenceclick--");
            return true;
        }

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            Log.e(TAG,"srx--onPreferenceChange--");
            if(mSwitchPreference.equals(preference)){
                boolean value = (Boolean)(newValue);
                Log.e(TAG,"srx-2222-onPreferenceChange--,value="+value);
            }
            if(preference.getKey().equals("pre_key")){ //judge according key
                Log.e(TAG,"srx-3333-onPreferenceChange--");
            }
            return true;
        }
    }
}

 

my_prefer.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
        android:key="pre_key"
        android:title="SwitchPreference"
        android:summary="srx-summary"
        />
</PreferenceScreen>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/settingsFragment"
        android:name="com.example.srx.myapplication.MainActivity$MyPreferenceFra"/>

</android.support.constraint.ConstraintLayout>

 

Log打印

01-01 10:47:39.899  2909  2909 E SrxPre  : srx--onPreferenceChange--
01-01 10:47:39.899  2909  2909 E SrxPre  : srx-2222-onPreferenceChange--,value=true
01-01 10:47:39.899  2909  2909 E SrxPre  : srx-3333-onPreferenceChange--
01-01 10:47:39.899  2909  2909 E SrxPre  : srx--onpreferenceclick--
01-01 10:47:39.929  2909  2909 E SrxPre  : srx--onPreferenceChange--
01-01 10:47:39.929  2909  2909 E SrxPre  : srx-2222-onPreferenceChange--,value=true
01-01 10:47:39.929  2909  2909 E SrxPre  : srx-3333-onPreferenceChange--

 

需要注意幾點:

1.如果想監聽onpreferenceclick(點擊了這個preference),onpreferencechanged(點擊開關狀態改變),需要讓這個switchPreferece.setonxxListener()才行,不然點擊時不會打印在onxxclick/onxxchangedlistener中的log.

2.switchpreference在不設置監聽前,能點擊開和關的,設置了監聽后,如果onxxxclick/onxxchanged的回調函數返回false, switchpreference就變的不能開關了。這時候需要把回調函數中的return false->return true,這樣就可以了

3. switchpreference的開關狀態,可以通過: public boolean onPreferenceChange(Preference preference, Object newValue),這里的newValue來獲取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM