Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击复选框时显示警报对话框_Android_Checkbox - Fatal编程技术网

Android 单击复选框时显示警报对话框

Android 单击复选框时显示警报对话框,android,checkbox,Android,Checkbox,我有一个复选框,可以选中或取消选中。当选中复选框并且用户单击它时,我希望显示一个AlertDialog,而不取消选中复选框(因为当您单击复选框时,它将变为未选中,因为它只是在状态更改之后)。在AlertDialog中,我想询问用户是否真的想取消选中它,然后才将复选框设置为未选中 我不提供任何更多的代码,因为这是不必要的。我需要指导 cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @

我有一个复选框,可以选中或取消选中。当选中复选框并且用户单击它时,我希望显示一个AlertDialog,而不取消选中复选框(因为当您单击复选框时,它将变为未选中,因为它只是在状态更改之后)。在AlertDialog中,我想询问用户是否真的想取消选中它,然后才将复选框设置为未选中

我不提供任何更多的代码,因为这是不必要的。我需要指导

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();
       } 
    }
});