【问题标题】:AlertDialog before selecting checkBox in Android在Android中选择复选框之前的AlertDialog
【发布时间】:2013-02-25 11:03:26
【问题描述】:

我有带有复选框的对话框。在选择这个复选框之前,我想问一下用户,他一定会选择这些复选框。 (我的意思是,我尝试选择复选框并在此 AlertDialog 出现之前询问我是否确定)

在代码中是这样的:

CheckBox cb = (CheckBox) v.findViewById(R.id.favouriteChkBox);

            if (cb.isChecked()) {
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        context);
                builder.setTitle("Do you want to add this to favourite?");

                builder.setPositiveButton("yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                itemChecked.set(position, true);
                            }
                        });
                builder.setNegativeButton("no",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                            }
                        });
                builder.create().show();

            }

但这不起作用。如果我单击“是”或“否”,则会显示 AlertDialog 并且没有仪表,复选框被选中。

你能告诉我为什么这不起作用吗? 谢谢!

【问题讨论】:

  • 当用户单击“否”时,您应该将复选框的选中状态设置为 false。由于您只是简单地取消 alertdialig,因此复选框仍处于选中状态。

标签: android checkbox android-alertdialog confirmation


【解决方案1】:
    final CheckBox cb = (CheckBox) findViewById(R.id.favouriteChkBox);

    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (cb.isChecked()) {
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        TestGitActivity.this);
                builder.setTitle("Do you want to add this to favourite?");

                builder.setPositiveButton("yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                cb.setChecked(true);
                            }
                        });
                builder.setNegativeButton("no",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                cb.setChecked(false);
                            }
                        });
                builder.create().show();

            }

        }
    });

【讨论】:

  • 嗨,谢谢:@Siddharth Lele,moncadad,StinePike 的提示。不幸的是,它只能部分正确。在按下复选框时,该复选框已被选中或取消选中,AlertDialog 仅撤销更改。我想要:在按下复选框时,会调用 AlertDialog 并做出决定:选择/取消选择复选框。我检查了一些 Listner,但它们没有按我的意愿工作。
  • 我认为,那么您应该创建一个自定义复选框。或者您可以简单地使用具有两种状态的切换按钮(甚至按钮)。在正常和活动状态下,在按钮上使用类似的选中/未选中图像。然后你就可以轻松自己处理按钮了
【解决方案2】:

我怀疑这与如果用户选择 NO 的事实有关,NegativeButtonOnClickListener 中的CheckBox 的状态不会改变。 试试这个代码:

CheckBox cb = (CheckBox) v.findViewById(R.id.favouriteChkBox);
if (cb.isChecked()) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Do you want to add this to favourite?");

    builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            itemChecked.set(position, true);
            // ADD THIS TO YOUR CODE
            cb.setChecked(true);
        }
    });

    builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // ADD THIS TO YOUR CODE
            .setChecked(false);
            dialog.dismiss(); // CHANGE THE .cancel() TO dismiss()
        }
    });

    builder.create().show();
}

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2018-02-28
    • 2014-05-30
    • 2015-07-20
    相关资源
    最近更新 更多