我有两个首选项 xml 文件。第一个(pref2.xml)包含 2 个首选项:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="key"
android:title="title"
android:defaultValue="false"
/>
<CheckBoxPreference
android:key="key2"
android:title="title"
android:defaultValue="false"
/>
</PreferenceScreen>
另一个(pref1.xml)包含 1 个首选项:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="key"
android:title="title"
android:defaultValue="false"
/>
</PreferenceScreen>
在我的偏好活动中,我试图改变它们:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref1);
this.getPreferenceScreen().removeAll();
addPreferencesFromResource(R.xml.pref2);
final ListAdapter adapter = getPreferenceScreen().getRootAdapter();
Log.d("LOG", "size of sharedPreferences"+adapter.getCount()+"(should be 2)");
实际上在这里我得到了正确的输出并且一切都正确显示。但我想更改关于一个偏好的显示偏好。因此,我在首选项活动中实现了 OnSharedPreferenceChangeListener:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
super.onSharedPreferenceChanged(sharedPreferences, key);
//switch the widget type
if (key.equals("key")){
this.getPreferenceScreen().removeAll();
addPreferencesFromResource(R.xml.pref1);
final ListAdapter adapter = getPreferenceScreen().getRootAdapter();
Log.d("LOG", "size of sharedPreferences "+adapter.getCount()+" (should be 1)");
}
}
嗯,pref1 首选项显示正确,但输出
“sharedPreferences 2 的大小”
表明在后台仍然应用了旧的首选项。如果我遍历 listAdapter 我也会得到旧的偏好。
知道我该如何解决这个问题吗?
我发现 listadapter 有点过时了。如果我通过 getPreferenceScreen().getPreferenceCount() 获得项目计数,我会得到正确的数量。但是我如何访问这些首选项?