2017-11-26 11 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); 
} 
} 

스크린 샷이 더 명확하게 무슨 뜻인지 강조한다 : 여기

코드의 비트는 내가 일을 할 수 없다. 내가 바꾸고 싶은 필드는 "Player 1"과 "Player 2"라는 이름의 필드입니다. 사용자가 그림과 같이 설정을 통해 새 이름을 입력하게합니다.

Screenshots from the Android Emulator

답변

0

대신에 어쩌면보십시오 :

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

이 :

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

또는 두 개의 문자열 변수 (값, 예를 들어, 값 2), 하나를 만들 수 있습니다 " 추가하려는 것을 잊어 버린 경우에는 "player_one"을, 다른 하나는 "player_two"를 입력하십시오. 나는 당신이 무엇을 만들려고하는지 정확히 모른다.

+0

나는 모든 preferenceswitches를 처리 할 수있는 함수를 만들고, 그에 따라 앱의 모양/동작을 변경하려고합니다. 내 문제는 사용자가 설정을 통해 적용하는 변경 사항이 이제는 앱에 전혀 표시되지 않는다는 것입니다. 예 : 조 선수가 EditTextPreference 필드에 입력되면 "선수 1"은 "조"로 변경되지 않습니다. –