首选项键始终返回null

时间:2016-06-24 00:14:22

标签: android

我的Android应用程序中有一个首选项屏幕,其中包含通过内部首选项和一些开关选项调用系统设置,如下所示:

<PreferenceCategory
        android:title="@string/preferences_activity_supervisor_settings_title">

    <Preference
        android:key="@+id/instrument_preference"
        android:title="@string/instrument_settings"
        android:summary="@string/instrument_settings">

    </Preference>

    <com.CustomSwitchPreference
        android:key="@string/prefs_super_autosend_key"
        android:title="@string/prefs_super_autosend_title"
        android:summary="@string/prefs_super_autosend_summary"
        android:defaultValue="false"/>

... ...

我的类扩展了PreferenceFragment,我使用addPreferencesFromResource()添加了资源。它没有问题。

然而,onPreferenceTreeClick()方法,当我点击片段(keyID = instrument_preference)时,首选项总是会将键作为 NULL 。偏好片段中的所有其他选项我都可以读取密钥。

问题是为什么以及如何检测在我的首选项列表的第一个元素中点击的用户?

2 个答案:

答案 0 :(得分:2)

首先从@ + id中删除+,因为每次因为@ + id而创建一个新密钥,这就是为什么你得到null。

要检测SharedPreference已更改,请使用以下简单代码:

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

       @Override
       protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 addPreferencesFromResource(R.xml.fw_preferences); //deprecated
                 PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
        }

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
               // handle the preference change here
        }

}

答案 1 :(得分:0)

尝试在首选项名称

之前删除@ + id

应该是

 <Preference
    android:key="instrument_preference" 
    android:title="@string/instrument_settings"
    android:summary="@string/instrument_settings">

</Preference>