Android 单击复选框时显示警报对话框
我有一个复选框,可以选中或取消选中。当选中复选框并且用户单击它时,我希望显示一个AlertDialog,而不取消选中复选框(因为当您单击复选框时,它将变为未选中,因为它只是在状态更改之后)。在AlertDialog中,我想询问用户是否真的想取消选中它,然后才将复选框设置为未选中 我不提供任何更多的代码,因为这是不必要的。我需要指导Android 单击复选框时显示警报对话框,android,checkbox,Android,Checkbox,我有一个复选框,可以选中或取消选中。当选中复选框并且用户单击它时,我希望显示一个AlertDialog,而不取消选中复选框(因为当您单击复选框时,它将变为未选中,因为它只是在状态更改之后)。在AlertDialog中,我想询问用户是否真的想取消选中它,然后才将复选框设置为未选中 我不提供任何更多的代码,因为这是不必要的。我需要指导 cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
} else {
}
}
});
请不要添加任何在if(isChecked){}
块中添加对话框的解决方案,如文档所示:
有两种状态的按钮,选中和未选中。当按钮按下时
按下或单击,状态将自动更改
这意味着侦听器将在复选框的状态更改后运行,因此此时显示对话框为时已晚。您应该创建一个自定义复选框并覆盖其切换方法,以便对状态执行任何操作。以下是一些基本代码来举例说明功能: 在xml中,按如下方式声明自定义视图(更改包名称): 这是您的自定义复选框类:
public class CustomCheckBox extends CheckBox {
private CustomCheckedChangeListener mListener;
public CustomCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomCheckBox(Context context) {
super(context);
}
public void addListener(CustomCheckedChangeListener list){
mListener = list;
}
@Override
public void toggle() {
if (mListener == null) return;
if (isChecked()) {
mListener.onConfirmCheckDisable();
} else {
super.toggle();
}
}
}
这是你的听众:
public interface CustomCheckedChangeListener {
public void onConfirmCheckDisable();
}
这有用吗?您只需创建一个AlertDialog,看
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
confirmCheck();
}
}
});
private void confirmCheck() {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("WARNING!")
.setMessage("¿Sure u check?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which){
cb.setChecked(false);
}
})
.setNegativeButton("No", null)
.show();
}
我希望我已经帮助了您,您好。这应该会起作用(不过,如果您使用的是片段调用getActivity(),请注意此处的上下文):
嗨,迈克。当状态更改为“未选中”后显示对话框时,这将不起作用。
public interface CustomCheckedChangeListener {
public void onConfirmCheckDisable();
}
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
confirmCheck();
}
}
});
private void confirmCheck() {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("WARNING!")
.setMessage("¿Sure u check?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which){
cb.setChecked(false);
}
})
.setNegativeButton("No", null)
.show();
}
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setMessage("Are you sure you want to uncheck this ?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
buttonView.setChecked(false);
}
}).setNegaviteButton("Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
buttonView.setChecked(true);
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
});