2011-11-06 99 views
2

我有一个没有响应我的setChecked(...)方法的togglebutton。下面是代码:Android的ToggleButton setChecked(...)方法不改变按钮的状态

mBool = mPrefs.getBoolean("buttondefault", true); 
Boolean b = mBool; //Only creating this for Logging, mBool IS PRIMITIVE 
Log.e("Update pref", b.toString()); 
mToggle = (ToggleButton)findViewById(R.id.ac_toggle); 
mToggle.setOnClickListener(this); 
mToggle.setChecked(mBool); 

日志报告mBool是真正,让我做mToggle.setChecked(mBool)按钮保持在关闭位置。

这里是按钮的XML:

<ToggleButton android:id="@+id/ac_toggle" 
android:textOn="Yes" 
android:textOff="No" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="3sp" 
android:layout_weight="5"/> 

任何想法?

+0

你把这段代码放在onCreate()里面吗? –

+0

是的,这个代码被调用onCreate() – JMRboosties

回答

5

我提供的代码只是从不同的方法复制而来。长话短说我在初始化并设置按钮的检查状态后设置了布尔值。道歉。

+4

这个答案不会upvoted :) –

+0

回答自己的问题和逻辑错误 –

4

请使用原始布尔设置状态

//set true or false based on your prefs 
boolean mBool = true; 
mToggle.setChecked(mBool); 
+0

我在代码中评论说我只创建一个布尔(非原文),因为我想使用它的toString()方法进行日志记录。我用于setChecked()的布尔是原始的。 – JMRboosties

+0

这显然有点晚,但是你可以在日志中使用原始的布尔值:'Log.d(TAG,“bool是”+ bool);' – Cornholio

0

由于按钮的setChecked()方法接受原始boolean作为参数。你正在提供一个Boolean(包装类)变量。通常情况下,应该没问题,但它不适用于此特定方法,因此您可能需要手动取消装箱变量或将mBool的类型更改为boolean

+0

如果发布已发布的答案。投票了较早的一个,而不是发布一个新的。如果有什么补充。张贴作为评论。这就是这个社区的工作原理。所有人都需要同步运行 – Javanator

+0

我在代码中评论说我只是创建一个布尔(非原文),因为我想使用它的toString()方法进行日志记录。我用于setChecked()的布尔是原始的。 – JMRboosties

+0

您可以使用(mBool +“”)打印出mBool(原始)的值。 – josephus

4

可能需要调用View.requestLayout()或View。按钮上的forceLayout()按钮View刷新按钮状态

+0

你是我的英雄。一直在4.3这个错误挣扎几天 – mente