2017-11-26 15 views
1

私はかなり時間がかかりましたが、AndroidでEditTextPreferenceで新しいテキストを入力したときにTextViewを更新する方法については頭を悩ますことができません。OnsharedPreferenceChangeListenerでTextViewのテキストを更新する

匿名リスナークラス内のonSharedPreferenceChangedメソッドでswitch文を使用します。しかし、player1View.setText(value)を設定しても何も起こりません。このタスクを達成するためのより簡単な方法がありますか?つまり、ユーザー入力を介して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

答えて

0

の代わりに多分試してみてください。

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

この:

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

か、2つの文字列変数(値、例えば値2)、のための1つを作成することもできます」追加するのを忘れてしまった場合は、「player_one」と「player_two」の2つがあります。私はあなたが構築しようとしていることを正確には知らない。

+0

私はすべてのpreferenceswitchesを処理し、それに応じてアプリケーションの外観/動作を変更できる関数を構築しようとしています。私の問題は、ユーザーが設定で適用した変更が、今やアプリに全く表示されないことです。例えば。 JoeがEditTextPreferenceフィールドに入力されている場合、「Player 1」は「Joe」に変更されません。 –

関連する問題