Java 使用外部方法更改设置后,如何更新设置显示
我需要在执行更改其中一个设置的代码后更新设置显示。我可以更改首选项,但在我离开并回来之前,它不会在显示中更新Java 使用外部方法更改设置后,如何更新设置显示,java,android,settings,Java,Android,Settings,我需要在执行更改其中一个设置的代码后更新设置显示。我可以更改首选项,但在我离开并回来之前,它不会在显示中更新 @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class GeneralPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) {
@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);
final Preference btnLexicon = findPreference("lexicon");
btnLexicon.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
selectLexicon();
return true;
}
});
btnLexicon.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(newValue.toString());
return true;
}
});
bindPreferenceSummaryToValue(findPreference("lexicon"));
}
外部方法使用警报对话框进行操作,然后相应地更新设置
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor prefs = settings.edit();
prefs.putString("lexicon", LexData.getLexName());
prefs.apply();
我试着用这个建议
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
}
及
实际上,您需要对在OnSharedPreferenceChangeListener中检索到的字符串执行一些操作
if ("lexicon".equals(key))
findPreference(key).setSummary(sharedPreferences.getString("lexicon", LexData.getLexName()));
解决方案是重新创建“设置”活动
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("lexicon".equals(key))
recreate();
}
FindReference是不推荐使用的。您当时使用的是API 28中不推荐使用的
android.preference
包。您需要迁移到appcompat。无论哪种方式,反对都是无关紧要的。
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("lexicon".equals(key))
recreate();
}