2011-11-06 102 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