2 つの設定 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>
もう 1 つ (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)");
実際、ここで正しい出力が得られ、すべてが正しく表示されます。しかし、1つの設定に関して表示された設定を変更したい。したがって、設定アクティビティに 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() を介してアイテムの数を取得すると、適切な量が得られます。しかし、どうすればこれらの設定にアクセスできますか?