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();
}