用户完成多个AlertDialogs

时间:2016-10-16 23:39:09

标签: java android

我正在执行以下操作:根据需要输入的股票数量,我生成一个EditText对话框。

例如,如果我在库存中输入数字5:

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

我生成一个Dialog 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。

我还想在添加最终产品后展示Toast。问题是Toast会在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();
            }
        }
    }
});

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

如果我正确读取此信息,您想从产品1/5开始,那么请转到产品5/5,但您获得的是产品5/5,直到产品1/5,正确?

如果是这样的话,你首先获得5/5的原因是因为它是最后创建的对话框(它覆盖了以前的对话框),以及toast是因为它在循环中而创建的。即使用户没有输入任何内容,循环也会继续。