2011-09-27 4 views
3

내 PreferenceActivity에 두 개의 PreferenceActivity이 있습니다.EditTextPreference가 변경 될 때 새 값을 표시하는 방법

내 문제는 항목을 업데이트 할 때 새로운 값이 화면에 반영되지 않는다는 것입니다.

public class HostSettingActivity extends PreferenceActivity { 

    private final String MY_DEBUG_TAG = "SettingActivity"; 
    SharedPreferences sharedPrefs; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     Log.i(MY_DEBUG_TAG, "HostSettingActivity Started"); 
     super.onCreate(savedInstanceState); 
     sharedPrefs = getPreferenceManager().getSharedPreferences(); 
     setPreferenceScreen(createPreferenceHierarchy()); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     Log.e(MY_DEBUG_TAG, "On Destroy"); 
    } 

    private PreferenceScreen createPreferenceHierarchy() { 

     // Root 
     PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); 


     PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this); 
     dialogBasedPrefCat.setTitle("Host Settings"); 
     root.addPreference(dialogBasedPrefCat); 

     EditTextPreference hostPreference = new EditTextPreference(this); 
     hostPreference.setKey("host"); 
     hostPreference.setDialogTitle("Host"); 
     hostPreference.setDefaultValue("http://example.com"); 
     hostPreference.setSummary("Set host"); 
     dialogBasedPrefCat.addPreference(hostPreference); 

     EditTextPreference portPreference = new EditTextPreference(this); 
     portPreference.setKey("port"); 
     portPreference.setDialogTitle("Port"); 
     portPreference.setDefaultValue("8080"); 
     portPreference.setSummary("Set port"); 
     dialogBasedPrefCat.addPreference(portPreference); 

     hostPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       EditTextPreference etp = (EditTextPreference) preference; 
       String newHostValue = newValue.toString(); 
       Log.i(MY_DEBUG_TAG, "New Host: "+newHostValue); 
       etp.setText(newHostValue); 
       return true; 
      } 
     }); 
     return root; 
    } 

} 

답변

4

전화의 데이터가 변경하고이를 다시 그려야한다

preference.notifyChanged(); 

. setTextsetTitle

 public boolean onPreferenceChange(Preference preference, Object newValue) { 
      EditTextPreference etp = (EditTextPreference) preference; 
      String newHostValue = newValue.toString(); 
      Log.i(MY_DEBUG_TAG, "New Host: "+newHostValue); 
      etp.setTitle(newHostValue); 
      return true; 
     } 

사이

+0

를 원하는 것을 수행하고있다! 나는 이것이 나의 2 시간 긴 고통을 끝낼 것이라고 생각했다 !! 그러나 notifyChanged()라는 메소드가 더 이상 환경 설정에 있다는 것을 깨달았습니다! :(notifyDependencyChange() 참조) –

+0

그것은 보호 된 메서드입니다. – WindRider

+0

보호 된 메서드는 자식 클래스에서 호출 할 수 있습니다. –