私はAndroidのSharedPreferencesを使用するアプリを持っています。私は、ListPreferenceが変更されたときにOnSharedPreferenceChangeListenerを使用して何らかのアクションを実行しています。 MainActivityのonStart()
メソッドでOnSharedPreferenceChangeListenerを初期化して登録します。 onStop()
で登録抹消します。なんらかの理由でそれはまったく動かない。アクティビティのonCreate()
に登録して登録を解除したことがないとうまくいくようです。どうしてこれなの?これは、初めてアクティビティを起動して設定を変更しようとしたときに起きているので、onStop()
が呼び出されることはなく、リスナーは決して登録抹消されません。関連するコードは以下の通りです:OnSharedPreferenceChangeListenerが意図したとおりに動作しない
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
private SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scoring);
// Initialize our game rules preference to its default value
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
setupViews(GameEngine.BAGS_PER_ROUND);
startNewGame();
}
@Override
protected void onStart() {
super.onStart();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("game_mode_list")) {
startNewGame();
Log.d(TAG, "ListPreference clicked");
}
}
};
prefs.registerOnSharedPreferenceChangeListener(prefListener);
}
@Override
protected void onStop() {
super.onStop();
// Unregister changeListener to prevent leaks (although Android uses a weak reference)
prefs.unregisterOnSharedPreferenceChangeListener(prefListener);
}
を使用する必要があります(.apply使用しています)、または.commit()を実行して共有設定を更新しますか? –
私は環境設定を更新していません。あなたがリスナーを登録し共有prerenceを変更したときに – intA
onSharedPreferenceChangedにのみトリガされます。ですから、私は、.commit()や.apply()を使って共有のprefファイルを更新するよりも、エディタを手に入れている場所があると思います。私は2つの項目とListPreferenceを持っている私のあるpreferences.xmlで –