0

我想在 api>=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);
    }

你能帮我吗?)

4

2 回答 2

0

SwitchPreference sToggle;即使在 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 级别上使用类的一般方法。

于 2013-07-02T12:35:09.070 回答
0

使用 SwitchPreferenceCompat 而不是 SwitchPreference。

于 2016-12-31T21:02:14.267 回答