Показывать всплывающее окно после того, как пользователь выполнил несколько AlertDialogs

#java #android

#java #Android

Вопрос:

Я делаю следующее: в зависимости от количества акций, которые необходимо ввести, я создаю диалоговое окно EditText.

Например, если я введу число 5 в наличии:

IMG: https://i.stack.imgur.com/iP4YL.jpg

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

IMG: https://i.stack.imgur.com/rhE60.jpg

Чего я не понимаю, так это того, как я хочу, чтобы заголовок отображался:

  • Продукт 1/5, продукт 2/5, продукт 3/5, продукт 4/5, продукт 5/5.

На самом деле я получаю следующее:

  • Продукт 5/5, продукт 4/5, продукт 3/5, продукт 2/5, продукт 1/5.

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

Мой код выглядит следующим образом:

 btnContinuar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int stock = Integer.parseInt(input_layout_stock.getEditText().getText().toString());
        for(int i = 1 ; i <= stock ; i  ){
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            LayoutInflater inflater = getActivity().getLayoutInflater();
            builder.setTitle("Producto "   i   "/"   stock);
            //builder.setMessage("Agregar");
            builder.setView(R.layout.dialog_add_product);
            builder.setView(inflater.inflate(R.layout.dialog_add_product, null));
            builder.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.show();
            builder.create();
            if(i == 5){
                Toast.makeText(getActivity(), "Se agregaron "   stock   " productos con éxito.", Toast.LENGTH_SHORT).show();
            }
        }
    }
});
 

Ответ №1:

for Цикл не ждет, пока диалоговое окно будет закрыто, чтобы создать следующее, поэтому второе диалоговое окно перекрывает первое, а третье перекрывает второе и так далее. Что вам нужно сделать, это показать каждое диалоговое окно в onDismiss обратном вызове предыдущего диалогового окна.

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

 private int current = 1; // Global variable



    final int stock = Integer.parseInt("5");
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Producto "   current   "/"   stock);
    builder.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            if (current < stock) {
                current  ;

                // TODO Create your next dialog here.
                builder.setTitle("Producto "   current   "/"   stock);
                builder.show();
            } else {
                // This was the last dialog. Show Toast.
                Toast.makeText(getActivity(), "Se agregaron "   stock   " productos con éxito.", Toast.LENGTH_SHORT).show();
                current = 1;
            }
        }
    });
    builder.show();
 

Комментарии:

1. Большое вам спасибо! Это сработало, но когда я ввожу новое значение в stock, диалоговое окно продолжает подсчет, а не начинается с 1. Например, если я ввел сначала «5» в наличии, а затем ввел «10». Непрерывный диалог от 5 до 10.

2. Вы должны сбросить значение current в предложении else . Пожалуйста, проверьте отредактированный ответ (после всплывающего окна).

Ответ №2:

Если я правильно читаю это, вы хотите начать с продукта 1/5, затем перейти к продукту 5/5, но вы получаете продукт 5/5 вплоть до продукта 1/5, правильно?

Если это так, то причина, по которой вы сначала получаете 5/5, заключается в том, что это последнее созданное диалоговое окно (оно охватывает предыдущие диалоговые окна), и всплывающее окно создается, потому что оно находится в цикле. Цикл продолжается, даже если пользователь ничего не ввел.