我现在正在为我的应用创建首选项页面
在API-14之后,可以使用switchpreference.我想用它来取代API14设备上的checkBoxpreference
使用res / xml和res / xml-14很容易获得正确的xml资源
然而,在编码部分中,根据API切换偏好并不是那么方便.
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并获取相应的对象来处理它.
但是管理代码非常不方便.
有没有人有更聪明的方法呢?
解决方法
也许你可以为你的SwitchPreference和CheckBoxPreference xml设置一个android:key属性,就像这样:
<?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>
和
<?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,如下所示:
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 } ... }
希望这对你有用.