【问题标题】:How do I update the settings display after using external method to change setting使用外部方法更改设置后如何更新设置显示
【发布时间】:2019-01-06 22:51:28
【问题描述】:

在执行更改其中一项设置的代码后,我需要更新设置显示。我可以更改首选项,但在我离开和回来之前它不会在显示中更新。

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

    @Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if ("lexicon".equals(key))
        sharedPreferences.getString("lexicon", LexData.getLexName());
}

【问题讨论】:

    标签: java android settings


    【解决方案1】:

    解决方案是重新创建设置活动

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if ("lexicon".equals(key)) 
            recreate();
    }
    

    【讨论】:

      【解决方案2】:

      您需要对在 OnSharedPreferenceChangeListener 中检索到的字符串进行实际操作。

      if ("lexicon".equals(key))
          findPreference(key).setSummary(sharedPreferences.getString("lexicon", LexData.getLexName()));
      

      【讨论】:

      • findPreference 已弃用
      • 您使用的是 android.preference 包,该包在 API 28 中已弃用。您需要迁移到 appcompat。无论哪种方式,弃用都是无关紧要的。
      猜你喜欢
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多