在以下情况中我需要您的帮助。
我有三个复选框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中。因此,非常感谢任何克服这一点的建议。
答案 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()
] ..我认为您可以使用这种方式获取当前选择或先前的选择。
这只是一个想法,你必须实现逻辑:)祝你好运!