我有两个偏好设置的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)包含一个首选项:
<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首选项正确显示,但是
"size of sharedPreferences 2"
输出表明仍然存在旧的首选项。如果我遍历listAdapter,我也会得到旧的首选项。
您有任何解决这个问题的想法吗?
我发现ListAdapter已经过时了。如果我通过getPreferenceScreen().getPreferenceCount()获取项目数,则可以获得正确的数量。但是如何访问这些首选项呢?