我正在尝试创建一个布局为“是”或“否”的警报对话框。我想通过单击“否”按钮关闭该对话框,但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希望您将其定型。有效地排除了将来对该领域进行更改的可能性。

加上不存在按引用参数,该规则可确保仅在本地方法所属的方法中分配本地方法。因此,代码更具可读性。

10-07 13:12
查看更多