【问题标题】:SharedPreference Change Listener and custom preferenceSharedPreference 更改侦听器和自定义首选项
【发布时间】:2014-11-18 22:26:25
【问题描述】:

我有这些偏好:

<xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
    android:key="pk1"
    android:title="@string/pt1"
    android:summary="@string/pt1s"
    android:defaultValue="false" />
<CheckBoxPreference
    android:key="pk2"
    android:title="@string/pt2"        
    android:defaultValue="false" />
<ListPreference 
    android:key="pk3"
    android:title="@string/pt3"
    android:dialogTitle="@string/pt3"
    android:entries="@array/fontsi"
    android:entryValues="@array/fontsiv"
    android:defaultValue="0" />     
<Preference
android:key="pkb"
android:title="@string/ptb" />
</PreferenceScreen>

还有设置活动:

public class SettingsActivity extends PreferenceActivity {
SharedPreferences.OnSharedPreferenceChangeListener lst;
SharedPreferences prf;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    prf = getPreferenceScreen().getSharedPreferences();
    lst = new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    Log.i("SettingsActivity","!any preference changen!");
    if (key.equals("pk1")) { Log.i("SettingsActivity","!pref PK1 called!"); }                                            }  
    else if (key.equals("pkb")) { Log.i("SettingsActivity","!pref PKB called!"); }            
    prf.registerOnSharedPreferenceChangeListener(lst);
}

@Override
protected void onResume() {
    super.onResume();
    prf.registerOnSharedPreferenceChangeListener(lst); }

@Override
protected void onPause() {
    super.onPause();
    prf.unregisterOnSharedPreferenceChangeListener(lst); }
...    
}

侦听器使用所有首选项,但自定义首选项(最后一个,pkb 作为键)! 我想用作后退按钮。 有人知道为什么吗?

【问题讨论】:

    标签: android settings listener shared preference


    【解决方案1】:

    显然,您的偏好不会改变任何偏好。

    由于它什么都不做,OnSharedPreferenceChangeListener 忽略它。

    一种可能的解决方案是为它设置一个clickListener,如下所示:

    findPreference("pkb").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            Log.i("SettingsActivity", "!pref PKB called!");
            return false;
        }
    });
    

    【讨论】:

    • 我猜你是对的 user324 (我可以叫你 user324 吗?), OnPreferenceClickListener 肯定有效,它是旧代码。我不喜欢放置第二个听众的想法,但我认为我必须...谢谢 user324,我想我会在 2 天内接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多