Android - последовательные / вложенные диалоговые окна, второе диалоговое окно закрывает первое

У меня есть приложение, в котором при нажатии кнопки появляется диалоговое окно, содержащее список, а после выбора определенного элемента в списке появляется диалоговое окно выбора номера. Я хочу, чтобы после того, как пользователь выбрал номер в диалоговом окне выбора номера, только диалоговое окно выбора номера закроется, а диалоговое окно останется открытым.

Пока это мой код.

Это код для первого диалогового окна (со списком):

private void generateUnitDialog(String[] productUnit) {

    final CharSequence[] items = productUnit;

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Make your selection");

    builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // Handle Confirm action here
        }
    });

    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // Handle cancel action here
        }
    });
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            // Do something with the selection
            Toast.makeText(getApplicationContext(),
                    "Item Click detected", Toast.LENGTH_SHORT)
                    .show();

            generateQuantityDialog();

        }
    });

    builder.setCancelable(false);

    AlertDialog alert = builder.create();
    alert.show();

}

Когда выбран определенный элемент списка, появляется диалоговое окно выбора номера с использованием этого кода:

public int generateQuantityDialog(){

         final Dialog d = new Dialog(com.angelo.orderform.OrderForm.this);

         d.setTitle("Choose Quantity");
         d.setContentView(R.layout.dialog);

         Button b1 = (Button) d.findViewById(R.id.button1);
         Button b2 = (Button) d.findViewById(R.id.button2);

         final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1);

         np.setMaxValue(100000);
         np.setMinValue(1);
         np.setWrapSelectorWheel(true);
         //np.setOnValueChangedListener(this);

         b1.setOnClickListener(new OnClickListener(){
             @Override
             public void onClick(View v) {
                 //tv.setText(String.valueOf(np.getValue()));
                 d.dismiss();
             }    
        });
        b2.setOnClickListener(new OnClickListener(){
          @Override
          public void onClick(View v) {
              d.dismiss();
           }    
          });
       d.show();

       return(np.getValue());


}

После того, как пользователь выберет определенное число, диалоговое окно выбора номера закрывается, а также диалоговое окно со списком. Я хочу, чтобы диалог со списком оставался.

Судя по всему, setCancellable (false) не помогает.

Любые идеи? Даже если это другой подход, я открываю уши.


person Razgriz    schedule 27.07.2013    source источник
comment
ты можешь получить мой ответ.   -  person Harshid    schedule 27.07.2013


Ответы (3)


Вы должны установить AlertDialog alert переменную global.

в соответствии с вашими требованиями вы можете отменить или отклонить alertdialog.

b1.setOnClickListener(new OnClickListener(){
             @Override
             public void onClick(View v) {
                 //tv.setText(String.valueOf(np.getValue()));
                 d.dismiss();
                 alert.dismiss() ; or 
                 alert.cancel();
             }    
        });

Вы можете отклонить alertDialog в соответствии с вашими требованиями.

например, если выбрать второй диалог.

person Harshid    schedule 27.07.2013
comment
Это сбивает с толку. Я хочу, чтобы первое диалоговое окно (диалоговое окно с предупреждением) оставалось ПОСЛЕ выполнения функции выбора номера. OnClickListener, который у вас есть, закрывает окно выбора чисел И диалоговое окно с предупреждением, что я не хочу делать. - person Razgriz; 27.07.2013

Хорошо, я понял это, но я думаю, что это плохая практика.

Что я сделал, так это я поместил код, который генерирует диалоговое окно выбора номера, и поместил его туда, где изначально был generateQuantityDialog(), и просто вызвал builder.show() после d.dismiss().

Я поищу обходной путь, отказавшись от этого подхода.

person Razgriz    schedule 27.07.2013

person    schedule
comment
Извините, я не понимаю, чем это отличается от того, что у меня есть. - person Razgriz; 27.07.2013