2013-07-08 65 views
0

立即改變在MainActivity.class偏好不是在Android的

我改變偏好的價值,像這樣:

mPrefs = StripedMain.this 
        .getSharedPreferences(SHARED_PREFS_NAME, 0); 
      mPrefs.registerOnSharedPreferenceChangeListener(this); 
      onSharedPreferenceChanged(mPrefs, null); 

public void onSharedPreferenceChanged(SharedPreferences prefs, 
       String key) { 

       preVal = prefs.getString(key, "st"); 
if (preVal.equals("a")){ 
     prefs.edit().putString("name", "Rob").commit(); 
} 

}

這工作,但本身並沒有在屏幕上的價值只有在設置屏幕關閉並再次打開後才能立即更改。

那麼爲什麼是這樣,我該如何解決它?

+0

嘗試調用這些東西最初負責顯示這些值 – dhams

+0

不叫'onSharedPreferenceChanged() ;'你自己。只需從某處更改首選項,它就會被調用。並在'onSharedPreferenceChanged();'方法更新你的GUI,就像你可能在'onCreate()'中做的那樣,立即顯示效果。 –

+0

嘗試兩個,不工作....... –

回答

0

希望你已經爲你的偏好定義了一個xml。假設你有一個EditText PREF,你應該有這樣的事情在PREF XML:

<EditTextPreference 
     android:summary="@string/summary" 
     android:title="@string/textinput" 
     android:key="input" 
     android:defaultValue= "@string/initialvalue" /> 

您需要定義一個默認值,如果你想看到它的值,並相應地做一些初始化當你的應用程序啓動和甚至在用戶沒有做任何設置改變之前。這個默認值將被使用,直到用戶在這個首選項中存儲一個新值。

MainActivity應該實現OnSharedPreferenceChangeListener

使用下面的邏輯來讀取和編輯sharedpref值

SharedPreferences mPrefs = getSharedPreferences(SHARED_PREFS_NAME, 0); 
mPrefs.registerOnSharedPreferenceChangeListener(this); 
onSharedPreferenceChanged(mPrefs, input); // this will initialise with existing pref value 

public void onSharedPreferenceChanged(SharedPreferences prefs, 
       String key) { 

if (key.equals("input")) { // doing a check for key if you want to add more prefs in future 
    preVal = prefs.getString(key, "st"); 
    if (preVal.equals("a")){ 
     prefs.edit().putString("name", "Rob").commit(); 
}