【问题标题】:setOnCheckedChangeListener is never called永远不会调用 setOnCheckedChangeListener
【发布时间】:2016-07-22 06:47:28
【问题描述】:

我整天都在努力理解,为什么我的方法 setOnChangeListener 从未被调用......它在第一个 Toast 之前运行良好......第二个 Toast 永远不会出现。怎么了?我应该以某种方式将视图传递给 onCheckedChangeListener 吗?我有活动,用户可以点击按钮,然后他会得到警报对话框,里面有 3 个单选按钮和单选组。我想知道他选择了什么单选按钮。不管我怎么尝试。没有任何效果。我总是只得到一个选中的单选按钮,我在 xml 布局中检查了它...帮助...

Button setWeekType = (Button) findViewById(R.id.setWeekType);
    if (setWeekType != null) {
        setWeekType.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(report_activity.this, R.style.DialogTheme)
                        .setView(R.layout.dialog_type_day)
                        .setCancelable(true)
                        .setPositiveButton("Choose", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                final View child = getLayoutInflater().inflate(R.layout.dialog_type_day, null);
                                final RadioGroup radiogroup = (RadioGroup)child.findViewById(R.id.radiogroup);
                                final RadioButton bhome = (RadioButton)child.findViewById(R.id.bhome);
                                final RadioButton bwork = (RadioButton)child.findViewById(R.id.bwork);
                                final RadioButton bschool = (RadioButton)child.findViewById(R.id.bschool);
                                bwork.setChecked(true);
                                Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();

                                radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                                    @Override
                                    public void onCheckedChanged(RadioGroup group, int checkedId) {
                                        Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();

                                        if (checkedId == bhome.getId()) {
                                            bhome.setChecked(true);
                                        }if (checkedId == bwork.getId()) {
                                            bwork.setChecked(true);
                                        }if (checkedId == bschool.getId()) {
                                            bschool.setChecked(true);
                                        }

                                    }

                                });

                            }

                        })
                        .setNegativeButton("Cancel", null)
                        .show();





            }
        });
    }

【问题讨论】:

  • 显示方法是什么?

标签: android radio-button android-alertdialog radio-group


【解决方案1】:

我运行您的代码,我认为问题出在child 查看,它是null!所以radiogroup 也是null 并且listener 永远不会被设置,使用日志来查看自己。

我建议您创建一个自定义 DialogFragment 以摆脱嵌套的内部类并更轻松地管理事物。

如果您需要教程: http://www.androidbegin.com/tutorial/android-dialogfragment-tutorial/

【讨论】:

    【解决方案2】:

    您正在(正)按钮回调中调用setOnCheckedChangeListener。这意味着您的第二个 Toast 只能在用户已经单击“选择”按钮后显示(可能为时已晚)。

    在显示对话框之前,您需要从 AlertDialog 实例中获取查找单选组并调用 setOnCheckedChangeListener

    【讨论】:

    • 你能给出简单的提示把 setOnCheckedChangeListener 放在哪里吗?我试图在警报对话框之前这样做,但它也是错误的。小的 sn-p 就足够了。感谢您的帮助!
    【解决方案3】:

    你可以把它变成 else if。示例:

    if (checkedId == bhome.getId()) {
        bhome.setChecked(true);
    }else if (checkedId == bwork.getId()) {
        bwork.setChecked(true);
    }else if (checkedId == bschool.getId()) {
         bschool.setChecked(true);
    }
    

    您可以在点击监听器的顶部制作 oncheckedchangelistener

    【讨论】:

      猜你喜欢
      • 2021-04-15
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2012-10-27
      • 2013-10-12
      • 2017-12-31
      • 2012-03-27
      相关资源
      最近更新 更多