首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码中的SwitchPreference和CheckBoxPreference

代码中的SwitchPreference和CheckBoxPreference
EN

Stack Overflow用户
提问于 2013-08-24 10:18:17
回答 3查看 24.9K关注 0票数 9

我现在正在为我的应用程序创建首选项页面

在API-14之后,可以使用switchpreference。我想用它来取代API14+设备上的checkboxpreference

使用res/xmlres/xml-14很容易获得正确的xml资源。

然而,在编码部分,根据API切换偏好就不那么方便了。

代码语言:javascript
复制
public class SettingActivity extends PreferenceActivity {
    private CheckBoxPreference enable;
    private SwitchPreference enablev14;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        addPreferencesFromResource(R.xml.setting);
        if (Build.VERSION.SDK_INT < 14)
            enable = (CheckBoxPreference) findPreference(key_enable);
        else
            enablev14 = (SwitchPreference) findPreference(key_enable);
    }
    ...
}

现在,我的方法是使用if-子句来检查Build.VERSION并获取相应的对象来处理它。但它相当不方便,很难管理代码。有没有人有更聪明的方法?

EN

回答 3

Stack Overflow用户

发布于 2013-08-24 10:46:21

也许您可以将android:key属性设置为SwitchPreference和CheckBoxPreference xml,如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:defaultValue="true" />
</PreferenceScreen>

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:defaultValue="true" />
</PreferenceScreen>

然后,您可以检查该键在您的代码中返回true还是false,如下所示:

代码语言:javascript
复制
public class SettingActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    addPreferencesFromResource(R.xml.setting);
    PreferenceManager preferenceManager = getPreferenceManager();
    if (preferenceManager.getSharedPreferences().getBoolean("pref_sync", true)){
        // Your switch is on
    } else {
        // Your switch is off
    }
    ...
}

希望这对你有用。

票数 14
EN

Stack Overflow用户

发布于 2015-04-11 21:32:51

在您Java代码中使用TwoStatePreference,它是CheckBoxPreferenceSwitchPreference的父类。它包含了您在用例中可能需要的所有方法。

下面是您提供的代码示例:

代码语言:javascript
复制
public class SettingActivity extends PreferenceActivity {
    private TwoStatePreference enable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        addPreferencesFromResource(R.xml.setting);
        enable = (TwoStatePreference) findPreference(key_enable);
    }
    ...
}
票数 6
EN

Stack Overflow用户

发布于 2013-09-04 11:27:49

根据代码想要对首选项实例做什么,它可能像强制转换为Preference而不是特定的派生类型一样简单,例如:

代码语言:javascript
复制
enable = (Preference)findPreference(key_enable);

这将允许类似这样的事情:

代码语言:javascript
复制
enable.setEnabled(true);

并且消除了在代码中检查API级别的需要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18414267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档