使AlertDialog等待用户输入?

时间:2019-05-12 21:22:57

标签: java android

由于异步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 个答案:

答案 0 :(得分:1)

您不能等待该对话框被关闭,但是可以通过任何按钮(包括后退键,因为对话框似乎可以取消)关闭该对话框时执行操作。

只需在AlertDialog上添加一个DialogInterface.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;