2013-03-06 64 views
1

我有我的prefence的選擇是這樣的:的Android PreferenceActivity

public class Opciones extends PreferenceActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.xml.opciones); 

     SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); 

     EditTextPreference editTextPref = (EditTextPreference) findPreference("opcCodigo"); 
     editTextPref.setSummary(sp.getString("opcCodigo", "")); 

     EditTextPreference editTextPref2 = (EditTextPreference) findPreference("opcUrl"); 
     editTextPref2.setSummary(sp.getString("opcUrl", "")); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     Preference pref = findPreference(key); 
     if (pref instanceof EditTextPreference) { 
      EditTextPreference etp = (EditTextPreference) pref; 
      pref.setSummary(etp.getText()); 
     } 
    } 
} 

的事實是,當我改變數據時,不會刷新,我不得不關閉該活動,並重新啓動後纔可以看到它們。

我錯過了什麼?

在此先感謝

回答

1

實現OnPreferenceChangeListener並重寫以下方法。

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
     //newValue is the edited data 
     if(editTextPref == preference) editTextPref.setSummary(newValue); 
     else editTextPref2.setSummary(newValue); 
} 
+0

爲什麼這是公認的答案? PreferenceActivity甚至沒有可以覆蓋的onPreferenceChange()方法。 – mpellegr 2013-08-13 15:56:51

+0

@mpellegr感謝您指出!現在編輯答案。 – Renjith 2013-08-19 12:43:47

1

試試這個:
1.添加OnSharedPreferenceChangeListner

public class Opciones extends PreferenceActivity implements 
    OnSharedPreferenceChangeListener 

2.與覆蓋方法onSharedPreferenceChanged

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key){ 
    // ... 
} 
+0

要使用這個,你需要使用getPreferenceScreen()getSharedPreferences()從你的活動中獲取首選項,然後使用registerOnSharedPreferenceChangeListener()和你的GLOBAL VARIABLE(所以它不會被垃圾回收)OnSharedPreferenceChangeListner作爲參數。 – mpellegr 2013-08-13 19:36:45