在复选框上显示Alertdialog单击

时间:2014-10-17 20:38:38

标签: android checkbox

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

我没有提供更多代码,因为没有必要。我需要指导。

cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {

        if (isChecked) {

        } else {

        }
    }
}); 

根据文档,请不要添加任何在if (isChecked) {}块中添加对话框的解决方案:

  

具有两种状态的按钮,已选中且未选中。当按钮是   按下或单击,状态会自动更改。

这意味着监听器在复选框状态改变之后运行,因此显示对话框为时已晚。

3 个答案:

答案 0 :(得分:1)

您应该创建一个自定义复选框并覆盖它的切换方法,以便根据状态执行任何操作。以下是一些示例功能的基本代码:

在xml中,按如下方式声明自定义视图(更改包名称):

<com.example.mike.myapplication.CustomCheckBox
    android:id="@+id/my_checkbox"
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

然后在Activity / fragment中初始化它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    cb = (CustomCheckBox) findViewById(R.id.my_checkbox);
    // You should ALWAYS add this listener!!!!
    cb.addListener(new CustomCheckedChangeListener() {

        @Override
        public void onConfirmCheckDisable() {
            buildDialog();
        }
    });
}

private void buildDialog() {
    new AlertDialog.Builder(this)
        .setTitle("Confirm")
        .setMessage("Are you sure you want to uncheck this entry?")
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                   cb.setChecked(false);
              }
        })
       .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) { 
               // do nothing
        }
       })
       .setIcon(android.R.drawable.ic_dialog_alert)
       .show();
}

这是您的自定义复选框类:

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

这有帮助吗?

答案 1 :(得分:1)

这应该可行(但是请注意这里的上下文,如果你在片段调用getActivity()中):

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

答案 2 :(得分:0)

您只需创建一个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();
}

我希望我能帮助你,问候。