首页 > 解决方案 > 带有警报框的单选按钮选中的侦听器

问题描述

我希望在单击单选按钮时出现一个警告框。选中时yes,设置检查,如果未选中,取消选中检查。

我使用无线电组 CheckedChangeListener 和警报对话框尝试了此代码。

 public void onRadioButtonChecked() {
    Log.v(TAG,"Radio Button : ");
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int buttonId) {
            // Check which radio button was clicked
            Log.v(TAG,"on checked: value" + radioGroup+" radio "+buttonId);
            switch(buttonId) {
                case R.id.radioButton:
                    Log.v(TAG,"radio button1 : ");
                    openDefault();
                    break;
                case R.id.radioButton2:
                    Log.v(TAG,"radio button2 : ");
                    openCalendar();
                    break;
                case R.id.radioButton3:
                    Log.v(TAG,"radio button3 : ");
                    openCustom();
            }
        }
    });
}

public void openDefault(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("Do you really want to enable Default settings? ");
            alertDialogBuilder.setPositiveButton("yes",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            radioGroup.setOnCheckedChangeListener(null);
                            radiobutton1.setChecked(true);
                            onRadioButtonChecked();
                            mOutputText.setText("Default Settings\n");
                            DefaultAlert();
                            Toast.makeText(MainActivity.this, "Default Settings Enabled",
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
            alertDialogBuilder.setNegativeButton("No",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            radioGroup.setOnCheckedChangeListener(null);
                            radiobutton1.setChecked(false);
                            onRadioButtonChecked();
                        }
                    });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}

public void openCalendar(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("Do you really want to enable Google calendar settings? ");
    alertDialogBuilder.setPositiveButton("yes",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    radioGroup.setOnCheckedChangeListener(null);
                    radiobutton2.setChecked(true);
                    onRadioButtonChecked();
                    mOutputText.setText("");
                    getResultsFromApi();
                    Toast.makeText(MainActivity.this, "Google Calendar Settings Enabled",
                            Toast.LENGTH_SHORT).show();
                }
            });
    alertDialogBuilder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    radioGroup.setOnCheckedChangeListener(null);
                    radiobutton2.setChecked(false);
                    onRadioButtonChecked();
                }
            });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}

public void openCustom(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("Do you really want to enable Custom settings? ");
    alertDialogBuilder.setPositiveButton("yes",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    radioGroup.setOnCheckedChangeListener(null);
                    radiobutton3.setChecked(true);
                    onRadioButtonChecked();
                    Toast.makeText(MainActivity.this, "Custom Settings Enabled",
                            Toast.LENGTH_SHORT).show();
                }
            });
    alertDialogBuilder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    radioGroup.setOnCheckedChangeListener(null);
                    radiobutton3.setChecked(false);
                    onRadioButtonChecked();
                }
            });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}

如果我选中单选按钮,它会出现警告框,当我按“否”时,它将取消选中。并再次转到同一个收音机并从警报框中按“是”,它不会检查,但会出现 Toast。

是什么问题并给出解决方案。

谢谢你

标签: androidradio-buttonandroid-alertdialogradio-group

解决方案


您犯错的第一件事是因为在这里您需要选择,而不是选项,所以请用复选框替换您的单选按钮。

或者打开对话框的解决方案使用复选框注册单击侦听器,或者现在作为单选按钮打开对话框。

用下面我的代码替换您的波纹管代码

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int buttonId) {
                // Check which radio button was clicked
                Log.v(TAG,"on checked: value" + radioGroup+" radio "+buttonId);
                switch(buttonId) {
                    case R.id.radioButton:
                        Log.v(TAG,"radio button1 : ");
                        openDefault();
                        break;
                    case R.id.radioButton2:
                        Log.v(TAG,"radio button2 : ");
                        openCalendar();
                        break;
                    case R.id.radioButton3:
                        Log.v(TAG,"radio button3 : ");
                        openCustom();
                }
            }
        });

我的代码

radioButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openDefault();
            }
        });
        radioButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openCalendar();
            }
        });
        radioButton3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openCustom();
            }
        });

推荐阅读