【问题标题】:Android CompoundButton Switch jumpDrawablesToCurrentState null crashAndroid CompoundButton Switch jumpDrawablesToCurrentState null 崩溃
【发布时间】:2012-09-27 06:32:26
【问题描述】:

我有一个成功使用ToggleButton 的应用。我正在转换应用程序以在 JELLY BEAN (4.1.1) 上使用。 4.1.1 有Switch 小部件,这是一个更好看的ToggleButton 小部件。这两个小部件都派生自CompoundButton。

Android 的比较文档在这里:

http://developer.android.com/guide/topics/ui/controls/togglebutton.html

上面写着:

ToggleButton 和 Switch 控件是 CompoundButton 的子类,并且功能相同,因此您可以以相同的方式实现它们的行为。

所以我所做的是将包含ToggleButtons 的活动布局文件复制到目录res/layout-v14/ 并将ToggleButton 的所有实例替换为Switch。这意味着Android 14及以上版本将使用Switch的布局文件,14以下将使用ToggleButton的布局文件。除了小部件名称之外,每个 XML 都是相同的。

<Switch
 android:id="@+id/settings_some_option_on_off"
 android:textOn="@string/settings_toggle_on"
 android:textOff="@string/settings_toggle_off"
 android:gravity="center"
 android:paddingRight="@dimen/size_padding_minor"
 android:layout_weight="1"
 android:layout_gravity="center"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"/>

在我的 .java 代码中,我只使用 CompoundButton。根本不使用ToggleButton 或Switch。

private CompoundButton mViewSomeOptionOnOff;
...
mViewSomeOptionOnOff = (CompoundButton) findViewById(R.id.settings_some_option_on_off);
etc.

当我在 ToggeButton。当我在 14 上运行时,Android 小部件框架中出现 null 崩溃。

我下载了 Android 源代码。从崩溃回溯中,我确切地知道崩溃在哪里。 Switch.java:

808     @Override
809     public void jumpDrawablesToCurrentState() {
810         super.jumpDrawablesToCurrentState();
811         mThumbDrawable.jumpToCurrentState();    <------ boom
812         mTrackDrawable.jumpToCurrentState();
813     }

thumb 是Switch 的新属性。即便如此,我也不应该定义它,对吧?它没有被列为强制属性。

作为测试,回到我的 -v14 布局中,我将 android:thumb 设置为可绘制对象。然后我在第 812 行点击了 null,track。我将android:track 设置为可绘制对象,并且崩溃消失了。 那到底是怎么回事?

为什么我会遇到 null 崩溃?

我是否需要找到默认的Track 和Thumb 可绘制对象,并将它们复制到我的应用中?

我正在尝试做的事情——使用 ToggleButton 和 Switch——不可能吗?

【问题讨论】:

  • 查看您的 logcat 回溯错误。它必须引用调用 Switch.java 的代码部分及其第 811 行。我认为这是当您调用 findViewById(R.id.settings_some_option_on_off) 时。对吗?
  • 回溯都是 Android 的东西。我的应用程序内没有框架。在onCreate()、onStart() 和onResume() 都成功完成后发生崩溃。
  • 我应该补充一下,崩溃发生在活动变得可见/可交互之前。
  • 嗯……如果您删除(或评论)有关此按钮的所有 java 内容,以便让 xml(并且只有 xml)显示开关,会发生什么?如果可行,请在每行添加您的 java 代码行,以确定您的代码的哪一部分不起作用。
  • 您的活动主题可能有问题。也许您使用的主题没有 switch 样式。我认为您需要为在 v14 及更高版本上运行的应用程序指定主题为 Holo。类似this

标签: android togglebutton android-4.2-jelly-bean


【解决方案1】:

确保您在 AndroidManifest.xml 上的 minSdkVersion 为 14

【讨论】:

    【解决方案2】:

    我也遇到了这个错误,并通过为 api 14 及更高版本设置主题来解决它 - 正如 nandeesh 评论的那样。

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 2015-10-02
      • 2012-06-19
      • 1970-01-01
      • 2018-02-07
      • 2012-07-07
      • 2012-12-27
      • 2012-06-05
      • 1970-01-01
      相关资源
      最近更新 更多