复选框在第二次单击之前未检查

时间:2014-03-08 00:38:34

标签: android checkbox

我的活动中有四个复选框,

[全部,选项1,选项2,选项3]。

我的预期功能是,在加载活动时选择全部作为默认值,如果您选择任何其他选项,将取消选中[全部],如果您选择了任何其他选项,则再次选择[全部],然后取消选中其他选项。

我有这种工作,All被选为默认值,但是当我选择其中一个选项时;根据需要取消选中所有内容,但在我再次按下该复选框之前,选中的复选框不会被选中。

同样如果我选中了选项2和3,并且我选择了全部:未选中选项2和3但是直到我再次按下它才会检查。

这是我的onCreateMethod

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selection);

    all = (CheckBox) findViewById(R.id.All);
    option1 = (CheckBox) findViewById(R.id.option1);
    option2 = (CheckBox) findViewById(R.id.option2);
    option3 = (CheckBox) findViewById(R.id.option3);


    IfAllChecked();
    optionOneSelectedUnCheckedAll();
    optionTwoSelectedUnCheckedAll();
    optionThreeSelectedUnCheckedAll();

}

这是我选择All时的代码:

private void IfAllChecked() {
    all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {


            if (option1.isChecked()) {
                option1.setChecked(false);
            }

            if (option2.isChecked()) {
                option2.setChecked(false);
            }

            if (option3.isChecked()) {
                option3.setChecked(false);
            }
        }
    }
    );
}

检查其中一个选项时的代码

private void optionOneSelectedUnCheckedAll() {
   option2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if (all.isChecked()) {
                all.setChecked(false);
              }

        }
    }
    );
}

这是我的布局,我在这里设置All为真。

<LinearLayout
        android:id="@+id/UnitName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <CheckBox
            android:id="@+id/All"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="All"
            android:checked="true" />

        <CheckBox
            android:id="@+id/option1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Dun L"/>

        <CheckBox
            android:id="@+id/option2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Blackrock" />

        <CheckBox
            android:id="@+id/option3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Dundrum" />

    </LinearLayout>

希望有人能理解我试图解释的内容。

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,您的描述与您提供的代码并不完全匹配。此外,还不清楚您所显示的方法在哪里被调用。实际上,如果您的布局包含上述alloption1option2option3 CheckBoxes,则以下代码应该与您一样我描述过。

Activity

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selection);

    all = (CheckBox) findViewById(R.id.All);
    option1 = (CheckBox) findViewById(R.id.option1);
    option2 = (CheckBox) findViewById(R.id.option2);
    option3 = (CheckBox) findViewById(R.id.option3);

    all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {    
            if (b) {
                option1.setChecked(false);
                option2.setChecked(false);
                option3.setChecked(false);
            }
        }
    });

    option1.setOnCheckedChangeListener(optionCheck);        
    option2.setOnCheckedChangeListener(optionCheck);        
    option3.setOnCheckedChangeListener(optionCheck);        
}

final CompoundButton.OnCheckedChangeListener optionCheck = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {    
        if (b) {
            all.setChecked(false);
        }
    }
};