Изменения в строке, заданной в общих настройках, не опубликованы в onSharedPreferenceChanged - PullRequest
0 голосов
/ 14 ноября 2018

Если я обновляю строку с общими настройками, я не получаю обратный вызов зарегистрированному методу onSharedPreferenceChanged. Другие обновления (не строковые наборы) не будут соответствовать описанному выше методу.

Код слушателя:

public class MyFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener
{
    public void onCreatePreferences (Bundle bundle, String s)
    {
        ...
        SharedPreferences preferences = <preferences>;
        preferences.registerOnSharedPreferenceChangeListener (this);
        ...
    }

     public void onSharedPreferenceChanged (SharedPreferences sharedPreferences, String key)
     {
         if (key.equals ("stringset-key"))
         {
             ... code to execute ...
         }
     }
}

Обновление активности:

public class MyActivity extends AppCompatActivity
{
    ...
    SharedPreferences preferences = <preferences>;
    Set<String> values = preferences.getStringSet ("stringset-key", null);

    values.add ("new string");

    SharedPreferences.Editor pref = preferences.edit ();
    pref.putStringSet ("stringset-key, values);
    pref.commit ();
    ...

MyFragment используется в MyActivity.

Единственное найденное мною рабочее решение - это удалить элемент (pref.remove + pref.commit) перед установкой обновленного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...