【问题标题】:Why i get exception with use SwitchPreference为什么我在使用 SwitchPreference 时遇到异常
【发布时间】:2013-07-02 12:05:31
【问题描述】:

我想在 api>=14 时使用 SwitchPreference sToggle,在 api

我的代码出现异常

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);
    }

你能帮帮我吗?)

【问题讨论】:

    标签: android android-preferences togglebutton android-2.2-froyo verifyerror


    【解决方案1】:

    SwitchPreference sToggle; 由您的代码定义,即使在 API 级别

    这些 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 级别上使用类的一般方法。

    【讨论】:

    • 谢谢!很好的答案!如果我想将 setChecked 方法添加到简单组件 Preference 我将 Preference 通过代码转换为 SwitchPreference 或 CheckBoxPreference ((SwitchPreference)sToggle).setChecked(false);或 ((CheckBoxPreference)sToggle).setChecked(false);
    【解决方案2】:

    使用 SwitchPreferenceCompat 代替 SwitchPreference。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多