通过OnsharedPreferenceChangeListener更新TextView中的文本

时间:2017-11-26 23:16:39

标签: java android textview edittextpreference

我已经尝试了不同的事情已经有好几个小时了,但是当用户通过Android中的EditTextPreference输入新文本时,我无法理解如何更新TextView。

我在onSharedPreferenceChanged方法中使用一个switch语句,在匿名监听器类中。但是,当我设置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”的字段,为了实现该目的,用户通过设置输入新名称,如图所示。

Screenshots from the Android Emulator

1 个答案:

答案 0 :(得分:0)

尝试一下而不是:

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

此:

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

或者您可能想要创建两个String变量(例如value,value2),一个用于“player_one”,另一个用于“player_two”,如果您忘记添加。我不确切地知道你想要建立什么。