我想在api&gt; = 14时使用SwitchPreference sToggle并在api <14时使用CheckBoxPreference chToggle
我的代码出现异常
public class SettingsActivity extends PreferenceActivity {
SwitchPreference sToggle;
CheckBoxPreference chToggle;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
sToggle = new CheckBoxPreference(this);
sToggle.setTitle("One");
targetCategory.addPreference(sToggle);
} else {
chToggle = new CheckBoxPreference(this);
chToggle.setTitle("Two");
targetCategory.addPreference(chToggle);
}
你帮我吗?)
答案 0 :(得分:0)
SwitchPreference sToggle;
由您的代码定义,即使在API级别&lt;那将是我所假设的例外。
该类在这些API级别上根本不存在,因此您根本不能使用它。有点甚至没有在代码中提到它。或者在技术上:不要做任何加载该类的事情。
但是,您可以将sToggle声明为存在的超类型的变量,例如
public class SettingsActivity extends PreferenceActivity {
Preference sToggle;
然后将使用SwitchPreference的代码移动到另一个未在较低API级别加载的类中。 E.g。
class ToggleNew {
public static Preference getToggle() {
return new SwitchPreference();
}
}
class ToggleOld {
public static Preference getToggle() {
return new CheckboxPreference();
}
}
您的原始类现在可以动态使用/加载您想要的版本。
Preference p;
if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
p = ToggleNew.getToggle();
} else {
p = ToggleOld.getToggle();
}
您需要稍微调整一下,但这是如何在某些API级别上使用类而不是在其他级别上使用类的一般方法。
答案 1 :(得分:0)
使用SwitchPreferenceCompat代替SwitchPreference。