2011-11-06 77 views
2

我試圖使用複選框控件創建首選項屏幕。更改時從CheckBoxPreference獲取值

<CheckBoxPreference android:summaryOn="@string/mySummaryOn" 
    android:summaryOff="@string/mySummaryOff" 
    android:key="myCB" 
    android:title="my checkbox"/> 

我想在得到改變時得到這個布爾值。

在我的應用程序有如下實施OnSharedPreferenceChangeListener

public boolean cbValue; 
@Override 
    public void onCreate() { 
     // The following line triggers the initialization of ACRA 
     ACRA.init(this); 
     prefs=PreferenceManager.getDefaultSharedPreferences(this); 
     prefs.registerOnSharedPreferenceChangeListener(this); 
     super.onCreate(); 
    } 

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 
    // TODO Auto-generated method stub 
    //FacebookStatus=prefs.getBoolean("myCB", true); 
    Toast.makeText(getBaseContext(), "Shared Preference Changes ",Toast.LENGTH_LONG).show(); 
} 

onSharedPreferenceChanged方法甚至當我在切換屏幕PREF複選框不是在所有所謂的完成。

如果我需要從共享首選項中獲取值,那麼每次值改變時我應該怎麼做?

+0

我已經通過[Shared Preferences]解決了這個問題(http://stackoverflow.com/questions/531427/how-do-i-display-the-current-value-of-an-android-preference-in-the -preference-su)....感謝很多傢伙的幫助 – shanmugamgsn

回答

2

而不是使用OnSharedPreferenceChangeListener的:

添加到您的偏好活動的onCreate方法如下一行:Preference myCheckbox = findPreference("myCB") 然後偵聽器適用於myCheckbox對象:myCheckbox.setOnPreferenceChangeListener(myCheckboxListener)

代碼聽者的(作爲一個階級場):

private OnPreferenceChangeListener myCheckboxListener = new OnPreferenceChangeListener() { 

    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     // Read new value from Object newValue here 
     return true; 
    } 
}; 
+0

謝謝Antek ....但myCheckbox.setOnPreferenceChangeListener(myCheckboxListener)它說myCheckboxListener cannpt解決... 我需要實現任何? – shanmugamgsn

+0

嘿Antek ....你能說如何從複選框insidde onPreferenceClick獲取布爾值??????????? – shanmugamgsn

+0

嘿Antek我已經通過[Shared Preferences]解決了這個問題(http://stackoverflow.com/questions/531427/how-do-i-display-the-current-value-of-an-android-preference-in-the -preference-su)....感謝很多人的幫助 – shanmugamgsn

0

您可以直接用SharedPreferences參數對象讀取新值。如果你知道,關鍵是從CheckBoxPreference你可以只讀取值:

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 

    if (key == getString(R.string.CheckBoxKeyId)) { 
     boolean myBool = sharedPreferences.getBoolean(key, false); 
     // do stuff 
    } 
} 

這樣可以節省您添加的每個CheckBoxPreference你可能有一個OnPreferenceChangeListener

相關問題