用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