В моей основной деятельности я хотел бы послушать изменения, внесенные в настройку «Настройки». Я используюПрослушать изменения предпочтений
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
//implement here -> but this peace of code is never called
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
Но слушателя никогда не называют. В моем приложении SettingsActivity я использую сгенерированный код из шаблона Android Studio. Например,
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
setHasOptionsMenu(true);
bindPreferenceSummaryToValue(findPreference("my_list"));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
startActivity(new Intent(getActivity(), SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
Как это исправить?
Вы сказали, что вы установили слушателя в MainActivity, но этот фрагмент фактически является частью SettingsActivity, поэтому, я думаю, вы должны установить вместо этого listener в SettingsActivity? – ehehhh
IDK, какое предпочтение вы изменяете в фрагменте (iirc, определенное в xml), но есть больше, чем просто 'DefaultSharedPreferences'. Может быть, вы слушаете изменения в неправильных предпочтениях? – zapl
@ehehhh: Второй сегмент кода относится к параметру SettingsActivity. Первый из MainActivity. Я хочу знать об изменениях в MainActivity, поэтому я могу настроить его при изменении настройки. –