2012-12-31 268 views
0

我需要您的幫助,在我的以下情況。複選框不起作用

我有三個複選框A,B和C以及變量a。如果我點擊複選框B,則a的值應保持爲2,如果我檢查A,則應該將其更改爲3,如果取消選擇,則應該返回2.

如何動態獲取?

我正在使用onCheckedChangeListener,它僅在更改複選框的選中狀態時更改變量。

任何幫助,非常感謝。

幾個代碼:

代碼ChkBxA:

ChkBxA.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) 
    { 
     if (buttonView.isChecked()) 
     { 
      variable_a = 1; 
     } 
     else 
     { 
      variable_a = 0; 
     } 
    } 
}); 

ChkBxB代碼:

ChkBxB.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) 
    { 
     if (buttonView.isChecked()) 
     { 
      if(variable_a == 1) 
      { 
       variable_b = 3; 
      } 
      else 
      { 
       variable_b = 2; 

      } 
     } 
     else 
     { 
      variable_b = 0; 
     } 
    } 
}); 

問題是variable_a的值更改時複選框的狀態A, variable_b的值不會更改,因爲它位於checkedChangeListener內。所以任何建議來克服這一點非常感謝。

+1

說明變量'variable_a'和'variable_b'是什麼類型的變量。如果他們屬於同一個班級,那麼你可以一起設置? – PCoder

+0

他們只是兩個不同的變量,只是爲了跟蹤相應複選框的狀態。但變量b依賴於變量a的值,這意味着間接地在複選框A的狀態上。 – Gridtestmail

回答

2

創建,其計算依據的選中狀態值一個單一的方法:

void CalculateValues(bool CheckBoxA, bool CheckBoxB) 
{ 
    variable_a = CheckBoxA ? 1 : 0; 
    variable_b = CheckBoxB? (variable_a==1 ? 3 : 2) : 0; 
} 

現在只需調用來自事件處理這種方法並傳遞檢查兩個複選框的狀態。事實上,兩個複選框的事件處理程序(調用)都是相同的。我不知道怎麼你可以從你ChkBxA檢索的選中狀態,但我們認爲它很簡單:

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
{ 
    CalculateValues(ChkBxA.IsChecked(), ChkBxB.IsChecked()); 
} 
+0

讓我試試這個方法,如果它正在工作,請儘快回覆。謝謝! – Gridtestmail

+0

非常感謝!它正在工作:) – Gridtestmail

+0

不客氣。 – alzaimar

0

寫下面的條件......

if (isChecked()) //<<===buttonView remove 
{ 
    if(variable_a == 1) 
    { 
      variable_b = 3; 
    } 
    else 
    { 
      variable_b = 2; 

    } 
} 
+0

我的問題不是條件不起作用。如果我選擇一個複選框或取消選擇,我需要重新計算變量的值。就像當你點擊一個網頁中的一個chkbx一樣,它會刷新並且改變發生在JavaScript上。 – Gridtestmail

0

雖然你的問題是不明確的,但得到您的評論在以前的答案後,大概是我找到了一種方法解決這個問題。

您可以使用stack來存儲當前的複選框值。 的值TOS將成爲您的複選框選擇值。通過使用onCheckedChangeListener()並使用適當的邏輯,您可以更改TOS的值[使用push()pop()] ..我想您可能會使用這種方式獲取當前選擇或之前的選擇。

這只是一個想法,你必須執行的邏輯:)好運!