1

我的代码中有一个 CheckBox,如果它被选中,用户不应该只是取消选中它。这就是我决定在 Checkbox 上实现 onCheckedChangeListener 的原因。

如果选中并单击,则要求确认,否则不要求确认。当要求确认(通过对话框)并且用户取消时,复选框必须保持(或再次设置为)选中状态。所以我在单击取消按钮时实现了“CheckBox.setChecked(true)”,现在我的确认被询问了两次。我不知道如何摆脱这个。

以下是相关代码:

    mEventAttendingCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {      
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                //do nothing
            } else {
                Context mContext = EventSingleViewActivity.this;
                final Dialog dialog = new Dialog(mContext);

                dialog.setCancelable(true);

                Button confirmButton = (Button) dialog.findViewById(R.id.confirmButton);    
                confirmButton.setOnClickListener(new View.OnClickListener() { 
                    @Override
                    public void onClick(View v){ 
                        //do something
                    }
                });


                Button cancelButton = (Button) dialog.findViewById(R.id.cancelButton);  
                cancelButton.setOnClickListener(new View.OnClickListener() { 
                    @Override
                    public void onClick(View v) { 
                        dialog.dismiss();
                        mEventAttendingCheckBox.setChecked(true);
                    }
                });


                dialog.show();

            }
        }
    });
4

2 回答 2

7

实现 on CLickListener instead of onCheckChanged.. 因为 on CLick 仅在用户单击它时才被调用,.. 但是即使您setChecked()在代码中说 OnCheckChanged 也会被调用...

于 2012-04-26T06:15:24.330 回答
0

使用相同的代码boolean flag= false

在您的其他条件检查中,

if(flag == false)
 // open dialog
else
 // just uncheck button

首先设置flag = true确认按钮的onClick,然后取消选中该复选框。并flag = false首先设置取消按钮的onClick,然后选中复选框。

于 2012-04-26T06:33:31.567 回答