【问题标题】:Canceling datePicker when clicking outside Android在Android外部单击时取消datePicker
【发布时间】:2014-12-15 10:21:43
【问题描述】:

我有一个带有 calendarView 的片段,当我单击“buttonRectangle”按钮时,它会显示一个 datePicker 来设置日期。 我的问题是,如果用户取消(通过单击对话框外部或使用 android 后退按钮,则会调用“generateDays()”方法。如果用户取消,我不希望调用该方法。我试过了"setCanceledOnTouchOutside(true)" 但它不起作用。

buttonRectangle.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            final Calendar myCalendar = Calendar.getInstance();
            DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                        int dayOfMonth) {
                    // TODO Auto-generated method stub
                    myCalendar.set(Calendar.YEAR, year);
                    myCalendar.set(Calendar.MONTH, monthOfYear);
                    myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                    generateDays(myCalendar);
                }
            };
            DatePickerDialog dpd= new DatePickerDialog(getActivity(), date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH));
            dpd.setCanceledOnTouchOutside(true);
            dpd.show();

            calendar.refreshCalendar();

        }
    });

提前致谢。

【问题讨论】:

  • 使用 dpd.setCancelable(true);
  • 还是同样的问题。
  • 解决了这个问题... if(view.isShown()){ generateDays(myCalendar); }

标签: android button android-activity android-fragments datepicker


【解决方案1】:

试试这个...

void showDatePicker() {
    Calendar c = Calendar.getInstance();
    currentYear = c.get(Calendar.YEAR);
    currentMonth = c.get(Calendar.MONTH);
    currentDay = c.get(Calendar.DAY_OF_MONTH);

    final DatePicker datePicker = new DatePicker(this);
    datePicker.init(currentYear, currentMonth, currentDay,new OnDateChangedListener() {

        @Override
        public void onDateChanged(DatePicker view, int year,
                int monthOfYear, int dayOfMonth) {
    this.monthOfYear=monthOfYear;
    this.dayOfMonth=dayOfMonth;
    this.year=year;
        }
    });
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        datePicker.setCalendarViewShown(false);
    }
    datePicker.setSpinnersShown(true);

    datePickerDialog = new AlertDialog.Builder(this)
                    .setTitle("Choose")
                    .setPositiveButton(android.R.string.ok,new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {

                        }
                    })
                    .setNegativeButton(android.R.string.cancel,
                            new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {

                        }
                    }).setView(datePicker).show();


}

【讨论】:

  • 这解决了问题... if(view.isShown()){ generateDays(myCalendar); }
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多