[Android]如何在Fragment中为AlertDialog设置final

Xia*_*ing 1 android android-fragments

当我触摸片段中的编辑文本时,我想使用AlertDialog来显示日历.在过去,当我使用Activity类时,它工作得很完美.但是当我使用Fragment时,它无法正常工作.

以下是在Fragment中触摸编辑文本时显示日历对话框的方法:

 private void setDateTimeField() {
    try {
        et_date.setOnClickListener(this);

        final Calendar newCalendar = Calendar.getInstance();
        fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth - 1);
                if (newDate.getTime().getTime() > (newCalendar.getTime().getTime())) {

                    final  AlertDialog builder = new AlertDialog.Builder(getActivity()).setTitle("Notification").setMessage("This is a date of future! We will get current date for this review!").show();

                    //this code below is coppied in https://xjaphx.wordpress.com/2011/07/13/auto-close-dialog-after-a-specific-time/
                    final Timer t = new Timer();
                    t.schedule(new TimerTask() {
                        public void run() {
                            builder.dismiss(); // when the task active then close the dialog
                            t.cancel(); // also just top the timer thread, otherwise, you may receive a crash report
                        }
                    }, 2000); // after 2 second (or 2000 miliseconds), the task will be active.
                    et_date.setText(dateFormatter.format(newCalendar.getTime()));

                } else {
                    newDate.set(year, monthOfYear, dayOfMonth);
                    et_date.setText(dateFormatter.format(newDate.getTime()));
                }
            }
        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
    } catch (Exception ex) {
        messages("Something Wrong!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错的:

 final  AlertDialog builder = new AlertDialog.Builder(getActivity()).setTitle("Notification").setMessage("This is a date of future! We will get current date for this review!").show();
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到这个错误 当我删除构建器的final时,上面的代码是正常的,但其他问题出现在:

builder.dismiss();
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到这个错误 上面的代码要求构建者必须是最终的.我知道我的问题的最佳解决方案是使用DialogFragment.但我不想使用它.此外,我想知道这个错误的原因.请帮我.p/s:我的英语不好,所以如果我的语法有任何错误,我很抱歉,感谢你阅读我的问题.

Dam*_*lak 5

更改

fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
Run Code Online (Sandbox Code Playgroud)

fromDatePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
Run Code Online (Sandbox Code Playgroud)