如何更新对话框的内容

How to update the content of a Dialog

我正在尝试在用户从列表对话框中选择数量后更新对话框的内容。例如,现在用户看到我的 "add Item dialog":

并且默认数量为 1,但如果用户决定 he/she 想要更多按添加数量(中性)按钮,它会显示另一个对话框: 问题是,在用户选择一个数量后,我的代码没有按照我的意愿刷新第一个对话框的内容,它仍然显示 1。 顺便说一句,我正在使用第 3 方 library 来创建对话框 这是我的代码:

  final int[] choosenQuantity = {1};
    final String[] str = {""};
    final MaterialDialog.Builder addItemBuilder = new MaterialDialog.Builder(this)
    .title("Add Item")
    .widgetColor(getResources().getColor(R.color.ColorPrimaryDark))
    .inputMaxLength(30, R.color.material_blue_grey_950)
            .content("Quantity: "+choosenQuantity[0]+"")
    .inputType(InputType.TYPE_CLASS_TEXT)
            .autoDismiss(false)
            .input("add shopping item", "", new MaterialDialog.InputCallback() {
                @Override
                public void onInput(MaterialDialog dialog, CharSequence input) {
                    str[0] = input.toString();
                    //add it to shoppingListItems and save to sharedPreferences
                    if (str[0].length() != 0) {
                        shoppingListItems.add(str[0] + " (" + choosenQuantity[0] + ")");
                        saveShoppingItems();
                        isListEmpty();
                        dialog.dismiss();
                    } else {
                        Toast.makeText(MainActivity.this, "no item description!", Toast.LENGTH_LONG).show();
                    }

                }
            }).negativeText("Cancel").callback(new MaterialDialog.ButtonCallback() {
                @Override
                public void onNegative(MaterialDialog dialog) {
                    super.onNegative(dialog);
                    dialog.dismiss();
                }
            });
    addItemBuilder.neutralText("Add Quantity").callback(new MaterialDialog.ButtonCallback() {
        @Override
        public void onNeutral(final MaterialDialog dialog) {
            super.onNeutral(dialog);
            MaterialDialog.Builder quantityDialogBuilder = new MaterialDialog.Builder(MainActivity.this);
            quantityDialogBuilder.title("Add Quantity");
            quantityDialogBuilder.items(R.array.Quantaty_array);
            quantityDialogBuilder.itemsCallback(new MaterialDialog.ListCallback() {
                @Override
                public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
                    choosenQuantity[0] = which+1;
                    addItemBuilder.content("Quantity: "+choosenQuantity[0]+"");
                }
            }).show();
        }
    }).show();

在代码中,在列表选择回调中,您正在调整 MaterialDialog.Builder 而不是对话框视图。

addItemBuilder.content("Quantity: "+choosenQuantity[0]+"");

生成器只是一个构建对话框视图的工具,一旦通过对话框的 show() 方法调用显示视图,生成器内容将不会对视图产生影响。尝试通过关闭对话框并再次显示来重新显示对话框。

另一种不关闭重新显示的情况是找到显示文本的view,直接设置文本。

例如:

addItemBuilder.neutralText("Add Quantity").callback(new MaterialDialog.ButtonCallback() {
        @Override
        public void onNeutral(final MaterialDialog addItemDialog) {
            super.onNeutral(dialog);
            MaterialDialog.Builder quantityDialogBuilder = new MaterialDialog.Builder(MainActivity.this);
            quantityDialogBuilder.title("Add Quantity");
            quantityDialogBuilder.items(R.array.Quantaty_array);
            quantityDialogBuilder.itemsCallback(new MaterialDialog.ListCallback() {
                @Override
                public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
                    choosenQuantity[0] = which+1;
                    TextView titleView = (TextView)addItemDialog.findViewById(R.id.dialog_title); // I assume the id as dialog_title

                    titleView.setText("Quantity: "+choosenQuantity[0]);

                }
            }).show();
        }
    }).show();