Android 为什么我的use SwitchPreference出现异常

Android 为什么我的use SwitchPreference出现异常,android,android-preferences,togglebutton,android-2.2-froyo,verifyerror,Android,Android Preferences,Togglebutton,Android 2.2 Froyo,Verifyerror,我想在api>=14时使用SwitchPreference sToggle,在apiSwitchPreference sToggle时使用CheckBoxPreference chToggle由您的代码定义,即使在API级别

我想在api>=14时使用SwitchPreference sToggle,在api
SwitchPreference sToggle时使用CheckBoxPreference chToggle由您的代码定义,即使在API级别<14时也是如此。我想这是个例外

该类在这些API级别上根本不存在,因此您不能使用它。甚至在代码中都没有提到。或者严格地说:不要做任何加载该类的事情

但是,您可以将sToggle声明为存在的超类型的变量,例如

public class SettingsActivity extends PreferenceActivity {
    Preference sToggle;
然后将使用SwitchPreference的代码移动到另一个未加载到较低API级别的类中。例如

 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级别上使用类而不是在其他API级别上使用类的一般方法。

使用SwitchPreferenceCompat而不是SwitchPreference。

谢谢!回答得好!如果我想将setChecked方法添加到简单组件首选项中,我将首选项转换为SwitchPreference或CheckBoxPreference,代码为((SwitchPreference)sToggle)。setChecked(false);或((复选框首选项)sToggle.setChecked(false);
public class SettingsActivity extends PreferenceActivity {
    Preference sToggle;
 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();
}