【问题标题】:Android Checkbox preferenceAndroid 复选框首选项
【发布时间】:2011-06-27 17:15:43
【问题描述】:

我找不到任何有关复选框首选项的教程。我可以使用列表首选项,但不能使用复选框首选项。现在,我希望如果用户在复选框上设置,吐司消息说“真”,如果他设置它,吐司消息说“假”。到目前为止,我有这个:

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;
    }
});

【问题讨论】:

  • 请编辑此变量以使变量以小写字母开头 - 将 CheckboxPreference 之类的东西视为变量名称会非常令人困惑!

标签: android preference


【解决方案1】:

您需要在 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;
        }
    }); 

【讨论】:

  • 谢谢!小问题:“EditPreference 类型的方法 checkboxPref(new Preference.OnPreferenceChangeListener(){}) 未定义”
  • 哎呀!我不小心删除了方法名称 - 请参阅上面的修订答案。
  • 很好,很不错,为您的问题添加了完整的解决方案!
【解决方案2】:

您可以将复选框的值转换为布尔值。这可能比检查 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;
    }
}); 

【讨论】:

    【解决方案3】:
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    Log.i("LOG", String.valueOf(sp.getBoolean("key", false)));
    

    如果项目被按下,我发现获得价值的最简单方法。如果日志是:

    我/日志:真

    复选框被按下

    我/日志:假

    复选框未选中

    希望这能回答你的问题。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 2015-12-07
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2011-12-18
      相关资源
      最近更新 更多