Как закрыть AlertDialog, только если я уже выбрал один из вариантов? - PullRequest
0 голосов
/ 21 июня 2019

Tengo un AlertDialog Elual Me Muestra algunas opciones, проблемы с es es el usuario puede cerrar el AlertDialog sin haber escogido ninguna opción. Вы должны знать, что вам нужно, и как только вы выберете эту опцию. Я хочу знать, что это является обязательным условием для всех setPositiveButton и для проверки подлинности переменных и пустых переменных нет haga nada ... pero resulta que sin importar lo que ponga en el setPositiveButton este cierra el dialogo.

public AlertDialog createRadioListDialog(final CharSequence[] items, final String title, final int post) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title)
            .setCancelable(false)
            .setSingleChoiceItems(items, posi, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    // codigo el cual guarda la opcion que selecciono.

                }
            }).setPositiveButton(getResources().getString(R.string.dialog_ok),
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if(!variable == null){
                        dialog.dismiss();
                    }
                }
            });
    return builder.create();
}

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете переопределить прослушиватель щелчков для положительной кнопки после отображения диалогового окна. Если вы хотите упаковать все в одну функцию, это будет выглядеть так:

private int selectedItemIndex = -1;

public void showRadioListDialog(final CharSequence[] items, final String title, final int post) {
    selectedItemIndex = -1;  // Reset each time we show the dialog.
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title)
            .setCancelable(false)
            .setSingleChoiceItems(items, posi, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    selectedItemIndex = which;
                }
            }) 
            .setPositiveButton(getResources().getString(R.string.dialog_ok), null);
    final AlertDialog dialog = builder.create();
    dialog.show();
    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()  {
        @Override
        public void onClick(View view) {
            if (selectedItemIndex >= 0 && selectedItemIndex < items.length) {
                // You can call another function here to pass the selected item.
                processItem(items[selectedItemIndex])
                dialog.dismiss();
            } else {
                Toast.makeText(MainActivity.this, "Please select an option.", Toast.LENGTH_SHORT).show();
            }
        }
    });
}
...