复选框不起作用

时间:2012-12-31 13:22:07

标签: android

在以下情况中我需要您的帮助。

我有三个复选框A,B和C以及变量a。如果我点击Checkbox 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;
        }
    }
});

问题是当复选框A的状态,variable_b的值没有改变时,variable_a的值会发生变化,因为它在checkedChangeListener中。因此,非常感谢任何克服这一点的建议。

3 个答案:

答案 0 :(得分: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() );
}

答案 1 :(得分:0)

写下以下条件......

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

     }
}

答案 2 :(得分:0)

虽然您的问题不明确,但在以前的答案中得到您的评论后,我可能找到了解决此问题的方法。

您可以使用stack存储当前复选框值。 TOS 的值将是您的复选框选择值。通过使用onCheckedChangeListener()并使用正确的逻辑,您可以更改TOS的值[使用push()pop()] ..我认为您可以使用这种方式获取当前选择或先前的选择。

这只是一个想法,你必须实现逻辑:)祝你好运!