Android CompoundButton开关jumpDrawablesToCurrentState空崩溃

Android CompoundButton开关jumpDrawablesToCurrentState空崩溃,android,togglebutton,android-4.2-jelly-bean,Android,Togglebutton,Android 4.2 Jelly Bean,我有一个应用程序成功地使用了切换按钮。我正在转换应用程序,以便在JELLY BEAN(4.1.1)上使用。4.1.1具有开关小部件,这是一个外观更好的切换按钮小部件。这两个小部件都源自CompoundButton Android的比较文档如下: 它说: ToggleButton和Switch控件是CompoundButton的子类,并且以相同的方式运行,因此可以以相同的方式实现它们的行为 因此,我所做的是获取包含ToggleButtons的活动布局文件,将其复制到目录res/layout-v1

我有一个应用程序成功地使用了
切换按钮
。我正在转换应用程序,以便在JELLY BEAN(4.1.1)上使用。4.1.1具有
开关
小部件,这是一个外观更好的
切换按钮
小部件。这两个小部件都源自
CompoundButton

Android的比较文档如下:

它说:

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

因此,我所做的是获取包含
ToggleButton
s的活动布局文件,将其复制到目录
res/layout-v14/
,并将
ToggleButton
的所有实例替换为
Switch
。这意味着Android版本14及以上版本将使用带有
开关的布局文件,14以下版本将使用带有
切换按钮的布局文件。除了小部件名称之外,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"/>
当我在<14上跑步时,效果非常好。和以前一样。我得到了
切换按钮
。当我在14上运行时,我在Android小部件框架中得到一个空崩溃

我下载了Android源代码。从坠机回溯,我知道坠机的确切位置。Switch.java:

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

811 mThumbDrawable.jumpToCurrentState()确保你的minSdkVersion在AndroidManifest.xml上是14,我也有这个错误,并通过设置api 14和更高版本的主题解决了这个问题,正如nandeesh评论的那样。

看看你的logcat回溯错误。它必须有一个对调用Switch.java的代码部分及其第811行的引用。我想这是在你调用
findVi时发生的ewById(R.id.settings\u some\u option\u on\u off)
正确吗?回溯都是Android的东西。我的应用程序中没有帧。崩溃发生在
onCreate()
onStart()
onResume()之后
都已成功完成。我应该补充一点,崩溃发生在活动变得可见/可交互之前。Hmmm…如果删除(或注释)有关此按钮的所有java内容,以便让xml(仅xml)显示,会发生什么情况显示切换?如果可以,请每行添加java代码行,以确定代码的哪一部分不工作。可能活动的主题有问题。可能您正在使用的主题没有切换样式。我认为您需要为在v14及以上版本上运行的应用指定Holo主题。类似于
808     @Override
809     public void jumpDrawablesToCurrentState() {
810         super.jumpDrawablesToCurrentState();
811         mThumbDrawable.jumpToCurrentState();    <------ boom
812         mTrackDrawable.jumpToCurrentState();
813     }