我正在使用PreferenceFragmentCompat
,当我编辑一个值(在我的情况下来自ListPreference
)时,我无法找到覆盖的方法。我只想立即对所选择的值做出反应。
感谢您的帮助!
答案 0 :(得分:1)
我找到另一种方式来订阅所有偏好的所有更改:SharedPreferences.OnSharedPreferencesChangeListener。具有两个备选方案的代码如下所示:
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.util.Log;
/**
* A simple {@link Fragment} subclass.
*/
public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceChangeListener {
private static final String TAG = "SettingsFragment";
private Preference thePreference;
public SettingsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
thePreference = findPreference("chosen_theme");
if (thePreference != null) {
thePreference.setOnPreferenceChangeListener(this);
} else {
Log.d(TAG, "Preference is empty");
}
}
@Override
public void onCreatePreferences(Bundle bundle, String s) {
}
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
Log.d(TAG, String.format("Changed: %s", preference.getKey()));
return true;
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d(TAG, String.format("%s %s", sharedPreferences, key));
}
}
SharedPreferences的速度更快,Preference更灵活。
答案 1 :(得分:0)
我相信您正在寻找在单击Preference时调用的回调的接口定义: