永远不会调用setOnCheckedChangeListener

时间:2016-04-02 13:06:16

标签: android radio-button alertdialog radio-group

我整天都在努力去理解,为什么我的方法setOnChangeListener永远不会被调用...它一直运行到第一个Toast ......第二个toast永远不会出现。怎么了?我应该将视图传递给onCheckedChangeListener吗?我有活动,用户可以点击按钮,然后他获得alertdialog,里面有3个单选按钮和radiogroup。我想知道,他选择了什么单选按钮。无论我尝试了什么。没有任何效果。我总是只选中一个单选按钮,我检查了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();





            }
        });
    }

3 个答案:

答案 0 :(得分:0)

如果是,你可以将其改为。示例:

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

你可以在on click listener

的顶部制作oncheckedchangelistener

答案 1 :(得分:0)

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

您需要从AlertDialog实例中找到无线电组并在显示对话框之前调用setOnCheckedChangeListener

答案 2 :(得分:0)

我运行您的代码,我认为问题出在child View,它的null!因此,radiogroup也是null,永远不会设置listener,请使用日志记录查看自己。

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

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