Обновите текст в TextView через OnsharedPreferenceChangeListener

Я пробовал разные вещи уже несколько часов, но я не могу понять, как обновить TextView, когда пользователь вводит новый текст через EditTextPreference в Android.

Я использую оператор switch в методе onSharedPreferenceChanged внутри анонимного класса слушателя. Однако, когда я устанавливаю player1View.setText (значение), ничего не происходит. Есть ли более простой способ выполнить эту задачу, а именно обновить textView с помощью пользовательского ввода?

Вот кусок кода, который я не могу заставить работать:

public class SettingsActivity extends AppCompatActivity
{
        private TextView player1View;
        private TextView player2View;
        private SharedPreferences.OnSharedPreferenceChangeListener listener;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    player1View = findViewById(R.id.player1);
    player2View = findViewById(R.id.player2);
    super.onCreate(savedInstanceState);
    getSupportFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    createListener();
}

private void createListener()
{
    listener = new SharedPreferences.OnSharedPreferenceChangeListener()
    {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
        {
            EditTextPreference etp = (EditTextPreference) sharedPreferences;
            String value = sharedPreferences.getString("player_one", "NULL");
            switch(key)
            {
                case "switch_setting1":
                    //Do something
                    break;
                case "player1_key":
                    player1View.setText(value);
                    break;
                case "player2_key":
                    player2View.setText(value);
                    break;
            }
        }
    };
    PreferenceManager.getDefaultSharedPreferences(getApplicationContext())
            .registerOnSharedPreferenceChangeListener(listener);
}
}

Скриншоты ниже должны более четко подчеркнуть, что я имею в виду. Поля, которые я хочу изменить, называются «Игрок 1» и «Игрок 2», и чтобы пользователь ввел новые имена через настройки, как показано.

Скриншоты из эмулятора Android


person Torstein Norum Bugge    schedule 26.11.2017    source источник


Ответы (1)


Попробуйте, может быть, вместо:

String value = sharedPreferences.getString("player_one", "NULL");

Этот:

String value = sharedPreferences.getString("player_one", null);

или вы можете создать две строковые переменные (например, значение, значение2), одну для «player_one», а другую для «player_two», если вы забыли добавить. Я не знаю точно, что вы пытаетесь построить.

person SteveYo    schedule 26.11.2017
comment
Я пытаюсь создать функцию, которая может обрабатывать все переключатели предпочтений и соответствующим образом изменять внешний вид/поведение приложения. Моя проблема заключается в том, что изменения, которые пользователь применяет через настройки, теперь вообще не отображаются в приложении. Например. Игрок 1 не меняется на Джо, если Джо вводится в поле EditTextPreference. - person Torstein Norum Bugge; 27.11.2017