我很难使程序适当地响应,因为异步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;
}
}
我知道这可能是业余实现,但我正在尝试。
您迫不及待要解散对话框,但是当通过任何按钮关闭时,您可以执行操作(包括后键,因为您的对话框似乎可以取消(。
只需在您的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;