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 }