2011-11-06 22 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

相关问题