Как обновить дисплей настроек после использования внешнего метода для изменения настроек - PullRequest
0 голосов
/ 07 января 2019

Мне нужно обновить экран настроек после выполнения кода, который меняет одну из настроек. Я могу изменить настройки, но они не будут обновляться на дисплее, пока я не уйду и не вернусь.

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

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Решением было воссоздать настройку активности

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if ("lexicon".equals(key)) 
        recreate();
}
0 голосов
/ 07 января 2019

Вам нужно что-то сделать с той строкой, которую вы извлекаете в OnSharedPreferenceChangeListener.

if ("lexicon".equals(key))
    findPreference(key).setSummary(sharedPreferences.getString("lexicon", LexData.getLexName()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...