Android Checkbox首选项

时间:2011-06-27 17:15:43

标签: android preference

我找不到关于复选框偏好的任何教程。我可以使用listpreference,但我不能使用checkbox首选项。现在,我希望如果用户在checbox上设置,一个toast msg说“true”,如果他将其设置为关闭,那么toast msg会说“false”。到目前为止,我有这个:

的preferences.xml:

 <CheckBoxPreference
          android:title="Show Call UI"
          android:defaultValue="true"
          android:summary="Show Call Interface when clicking call button"
          android:key="checkboxPref" />

EditPreferences.java:

public class EditPreferences extends PreferenceActivity {

    String listPreference;
    boolean checkboxPreference;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    public void onStart(Intent intent, int startId) {
        getPrefs();
    }

    private void getPrefs() {
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());
        listPreference = prefs.getString("listPref", "nr1");
        checkboxPreference = prefs.getBoolean("checkboxPref", true);
    }
}

编辑:解决方案感谢David Caunt:

checkboxPreference.
    setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {

    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (newValue.toString().equals("true")) {
            Toast.makeText(getApplicationContext(), "CB: " + "true",
                                                    Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(), "CB: " + "false",
                                                    Toast.LENGTH_SHORT).show();
        }
        return true;
    }
});

3 个答案:

答案 0 :(得分:48)

您需要在onCreate方法

中为Preference添加一个侦听器
    final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref");

    checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            Log.d("MyApp", "Pref " + preference.getKey() + " changed to " + newValue.toString());       
            return true;
        }
    }); 

答案 1 :(得分:14)

您可以将复选框的值强制转换为布尔值。这比检查toString()值更安全,更可扩展。

final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref");

checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if(newValue instanceof Boolean){
            Boolean boolVal = (Boolean)newValue;
        }
        return true;
    }
}); 

答案 2 :(得分:0)

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Log.i("LOG", String.valueOf(sp.getBoolean("key", false)));

如果找到项目,我发现获得价值的最简单方法。如果日志为:

I / LOG:是

按下复选框

I / LOG:错误

未选中复选框

希望这能回答您的问题。