有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java让AlertDialog等待用户输入?

由于async AlertDialog,我很难让程序正确响应。我想让程序在用户关闭窗口后做一些事情,不管是否按下正/负按钮。有什么办法让这个项目等着吗?感谢您的建议

下面是定制的AlertDialog

private DialogListener listener;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialogfragment, null);
        final EditText numProd = view.findViewById(R.id.prodInput);
        final EditText discount = view.findViewById(R.id.popust);
        builder.setView(view)
                .setTitle("Input")
                .setNegativeButton("Back", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        listener.getInput(1, 0.0);
                    }
                })
                .setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        int prodnumber = 1;
                        if (!numProd.getText().toString().equals("") && !(Integer.parseInt(numProd.getText().toString()) < 0)) {
                            prodnumber = Integer.parseInt(numProd.getText().toString());
                        }
                        double discNum = 0.0;
                        if (!discount.getText().toString().equals("") && !(Double.parseDouble(discount.getText().toString()) < 0) && !(Double.parseDouble(discount.getText().toString()) > 100)) {
                            discNum = Double.parseDouble(discount.getText().toString());
                            discNum = discNum / 100;
                        } else if (!discount.getText().toString().equals("") && !(Double.parseDouble(discount.getText().toString()) < 0) && !(Double.parseDouble(discount.getText().toString()) > 1)) {
                            discNum = Double.parseDouble(discount.getText().toString());
                        }
                        listener.getInput(prodnumber, discNum);
                        dialogInterface.dismiss();
                    }
                });
        return builder.create();
    }

第二节课,我想让程序为我做一些事情:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case RC_BARCODE_CAPTURE:
                if (resultCode == CommonStatusCodes.SUCCESS) {
                    if (data != null) {
                        final Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject);
                        final String barcodeValue = barcode.displayValue;
                                  if (barcodes.contains(barcodeValue)) {
                            productNum = 1;
                            updateItem(barcodeValue);
                        } else {
                            inputDialog numInput = new inputDialog();
        numInput.show(getSupportFragmentManager(), "NumberInput");
                            addProduct(barcodeValue);
                        }
                        adapter.notifyItemChanged(barcodes.indexOf(barcodeValue));
                    }
                } else {
                    super.onActivityResult(requestCode, resultCode, data);
                }
//implementing the interface in this class
     @Override
        public void getInput(int number, double discNum) {
            productNum = number;
            if (discNum != 0.0) {
                discount = discNum;
            }
        }

我知道这可能是一个业余的实现,但我正在努力


共 (1) 个答案

  1. # 1 楼答案

    你不能等待对话框被取消,但是当它被任何按钮关闭时,你可以执行一个操作(包括后退键,因为你的对话框看起来是可取消的)

    只需添加一个对话框界面。在AlertDialog上使用OnDismissListener,而不是:

    return builder.create();
    

    试试看:

    AlertDialog dialog = builder.create();
    dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            // do your stuff now
        }
    });
    return dialog;