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 楼答案
你不能等待对话框被取消,但是当它被任何按钮关闭时,你可以执行一个操作(包括后退键,因为你的对话框看起来是可取消的)
只需添加一个对话框界面。在AlertDialog上使用OnDismissListener,而不是:
试试看: