我正在尝试创建一个布局为“是”或“否”的警报对话框。我想通过单击“否”按钮关闭该对话框,但dialogView.dismiss();
出错。
这是我的代码。
private void showCancelOrderDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_details_cancel_order, null);
builder.setView(dialogView);
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.WHITE);
SpannableStringBuilder ssBuilder = new SpannableStringBuilder(db_title);
ssBuilder.setSpan(foregroundColorSpan,0,db_title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setTitle(ssBuilder);
yes = dialogView.findViewById(R.id.btn_yes);
yes.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
////////////////////////////
}
});
no = dialogView.findViewById(R.id.btn_no);
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogView.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
最佳答案
从以下更改您对dialogView
的定义:
View dialogView = inflater.inflate(R.layout.dialog_details_cancel_order, null);
...对此:
final View dialogView = inflater.inflate(R.layout.dialog_details_cancel_order, null);
出现
dialogView
的原因有两种:一种是托管整个代码段,另一种是匿名onClick
类中的View.OnClickListener
。如果两个方法看到相同的局部变量,则Java希望您将其定型。有效地排除了将来对该领域进行更改的可能性。
加上不存在按引用参数,该规则可确保仅在本地方法所属的方法中分配本地方法。因此,代码更具可读性。