【问题标题】:Android: datepickerdialog cancel dialog without getting the dateAndroid:datepickerdialog取消对话框而不获取日期
【发布时间】:2015-06-29 15:26:39
【问题描述】:

在一个片段类中,我正在使用这个 sn-p:

Calendar c = Calendar.getInstance();
                int mYear = c.get(Calendar.YEAR);
                int mMonth = c.get(Calendar.MONTH);
                int mDay = c.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog dialog = new DatePickerDialog(getActivity(), datePickerListener, mYear, mMonth, mDay);
                dialog.setButton(DatePickerDialog.BUTTON_POSITIVE, "OK", dialog);
                dialog.setButton(DatePickerDialog.BUTTON_NEGATIVE, "ANNULLA", (DialogInterface.OnClickListener)null);
                dialog.show();


private DatePickerDialog.OnDateSetListener datePickerListener
            = new DatePickerDialog.OnDateSetListener() {

        // when dialog box is closed, below method will be called.
        public void onDateSet(DatePicker view, int selectedYear,
                              int selectedMonth, int selectedDay) {
            //Do whatever you want
            Log.d("DATEPICKER","La data presa è "+selectedDay+selectedMonth+selectedYear);
        }
    };

不幸的是,我在单击“正”和“负”按钮时都得到了日期。当然,我只需要带有肯定按钮的日期(但是,我在日志中看到了两者的条目)。

【问题讨论】:

  • 您似乎创建了 DatePickerDialog“对话框”,但您不使用它...尝试将 DatePickerDialog.OnDateSetListener 替换为“dialog.OnDateSetListener”。
  • 您是否有理由调用setButton() 来覆盖默认按钮?该对话框有两个默认按钮,用于取消和设置。使用默认按钮时,只有 Set 会导致调用监听器的onDateSet() 方法。

标签: android android-dialog android-datepicker


【解决方案1】:

如果您查看 DatePickerDialog 的源代码(在 API 16 上测试),您会注意到 onDateSet() 总是在 onStop() 中调用 方法。 我覆盖了默认的正按钮行为,并实现了正按钮侦听器 onDateSet()

private class ReportDatePickerDialog extends DialogFragment implements android.content.DialogInterface.OnClickListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        DatePickerDialog dialog = new DatePickerDialog(getActivity(), null, initialYear, initialMonth, initialDay);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", ReportDatePickerDialog.this);
        return dialog;
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        ((DatePickerDialog)getDialog()).onClick(dialog, which);

        if (which != DialogInterface.BUTTON_POSITIVE) {
            return;
        }
        DatePicker datePicker = ((DatePickerDialog)getDialog()).getDatePicker();
        datePicker.getDayOfMonth();
        datePicker.getMonth();
        datePicker.getYear();
    }
}

我想最终最好在这种情况下创建自定义对话框窗口。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 最终日历 c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog dailog= new DatePickerDialog(getActivity, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { txtDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + 年); } }, mYear, mMonth, mDay); dailog.show();
    • 对不起..这段代码对我有用..很抱歉给您带来不便
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2015-11-06
    相关资源
    最近更新 更多