2013-02-11 114 views
0

我嘗試更改複選框用戶將其狀態更改爲後的背景選中。下面的代碼不能很好地工作。如果我點擊未選中的複選框,它的狀態和顏色變爲藍色,當我再次單擊它並取消選中時,顏色保持藍色而不是變爲紅色。我確實介紹了致電無效()沒有成功。我確認方法recievies點擊並正確地看到檢查狀態,但如果聲明我所做的似乎只工作一次。無法更改CheckBox視圖的背景顏色兩次 - Android

XML

<CheckBox 
    android:id="@+id/chkLargeIcons" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="20" 
    android:onClick="handleCheckBoxClick" /> 

代碼

public void handleCheckBoxClick(View view) { 
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId()); 
    if(tmpChkBox.isChecked()) 
    { 
     tmpChkBox.setBackgroundColor(color.blue); 
    } 
    else 
    { 
     tmpChkBox.setBackgroundColor(color.red); 
    } 

    System.out.println(view.getId() + " " + tmpChkBox.isChecked()); 

    switch (view.getId()) { 
    case R.id.chkLargeIcons: 
     ...  
    break; 
     ... 
    } 
    ... 
} 

我應該在我的代碼改變什麼,使其工作,因爲我想要的嗎?

在此先感謝您的任何幫助和建議。

+0

你把這段代碼放在哪裏? – 2013-02-11 19:17:07

+0

@JustinJasmann我有多個複選框,爲此我指定了相同的「OnClick」方法,此代碼位於此方法內部,並且由於System.out.println應輸出內容,因此複選框的視覺狀態在一兩次後保持不變點擊 – MoreThanChaos 2013-02-11 20:07:13

+0

你可以發佈更多的代碼來顯示你在這個監聽器中的位置嗎? – 2013-02-11 21:15:47

回答

0

第一個不清楚的方面

事情是,如果有人認爲我使用Android 顏色類在我的代碼提及,例如顏色可能會誤導一些解釋。雖然我是用我的色彩藍色存儲在color.xml版本,並且這就是爲什麼我說他們在代碼color.red代替Color.RED

所以我的代碼與其他答案中的監聽器代碼相同,如果您認爲該顏色是從android類中獲取的,則兩者都有效。

我的問題的來源是一些奇怪的故障,或不知道我的android行爲,導致以下代碼工作有缺陷。

public void handleCheckBoxClick(View view) { 
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId()); 
    if(tmpChkBox.isChecked()) 
    { 
     tmpChkBox.setBackgroundColor(color.blue); 
    } 
    else 
    { 
     tmpChkBox.setBackgroundColor(color.red); 
    } 
} 

正線這樣一個

tmpChkBox.setBackgroundColor([ColorFromResources]); 

雖然執行代碼給我顏色變化的只是一個出現時那麼它只是呆在那樣,完全地反應遲鈍。這一改變很大程度上是誤導性的,讓我長時間陷在這個問題上,甚至讓我留下來修改。 一些調查研究之後,我想通,在代碼以下更改解決我的問題:

tmpChkBox.setBackgroundColor(getResources().getColor([ColorFromResources])); 

現在所有的作品就像一個魅力。但我仍然困惑,爲什麼從資源調用顏色沒有getResources()。getColor(...)。希望答案能夠幫助像我一樣奇怪的人。

2

對於更改時檢查您需要附加OnCheckChangedListener。然後將上面的代碼放在裏面。

CheckBox tmpChkBox = (CheckBox) findViewById(view.getId()); 
tmpChkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      buttonView.setBackgroundColor(Color.BLUE); 
     } else { 
      buttonView.setBackgroundColor(Color.RED); 
     } 
    } 
}); 
+0

它不適用於我的情況,區別在於,檢查並取消選中後,它將顏色更改爲藍色,並停止工作。其他問題 - 是否爲一個obejct設置多次相同的偵聽器是一種好的做法,我的方法的代碼處理多個複選框,並通過id區分它們。 – MoreThanChaos 2013-02-11 19:58:15