Подтвердить что ты не робот

Как определить отмена щелчка диалогового окна datepicker?

Я использую следующие пример выбора даты

http://developer.android.com/guide/tutorials/views/hello-datepicker.html

теперь я хочу выполнить некоторые функции при нажатии кнопки отмены выбора даты, но не вижу отмену события внутри datepickerdialog

может ли кто-нибудь помочь мне в этом, чтобы достичь этого.

любая помощь будет оценена.

4b9b3361

Ответ 1

Вот как я это сделал:

  DatePickerDialog dialog = new DatePickerDialog(this,
              mDateSetListener,
              year, month, day);

  dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
       if (which == DialogInterface.BUTTON_NEGATIVE) {
          // Do Stuff
       }
    }
  });

Ответ 2

Если вы хотите выполнить другое действие в зависимости от того, выбрал ли пользователь дату или нет, вы можете использовать обработчик onDismiss. Обязательно установите логическое значение (например, "isDataSet" ), чтобы указать, выбрал ли пользователь дату или нет. Вот пример:

// Date Picker Dialog
   public void showDatePickerDialog(View view) {
   int year, month, day;
   isDataSet = false;  // this is used by the onDismiss handler

// Set initial time period in DatePicker to current month
   calendarCurrent = Calendar.getInstance(); 
   month = calendarCurrent.get(Calendar.MONTH);
   day =   calendarCurrent.get(Calendar.DAY_OF_MONTH);
   year =  calendarCurrent.get(Calendar.YEAR);

   DatePickerDialog datePickerDialog = new DatePickerDialog(YourActivity.this, dateSetListener, year, month, day );
   datePickerDialog.setOnDismissListener(mOnDismissListener);
   datePickerDialog.show();
   datePickerDialog_visible=true;  //indicate dialog is up
 } // [END showDatePickerDialog] 

//onDismiss handler
private DialogInterface.OnDismissListener mOnDismissListener =
        new DialogInterface.OnDismissListener() {
            public void onDismiss(DialogInterface dialog) {
                datePickerDialog_visible=false;  //indicate dialog is cancelled/gone
                if (isDataSet) {  // [IF date was picked
                    //do something, date now selected
                } else {
                    //do someething else, dialog cancelled or exited
                }   
            }
        };

Ответ 3

DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {


            }
        }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));

        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialogInterface) {

            }
        });
        dialog.show();

Ответ 4

Так как DatePickerDialog является Dialog, он поддерживает следующее:

setOnCancelListener(OnCancelListener listener)
setOnDismissListener(OnDismissListener listener)

Используя оба прослушивателя, вы можете определить все отклонения от диалога выбора даты. Первый ответит на вопрос, последний для завершения.

Ответ 5

DatePickerDialog теперь предоставляет слушателю onCancel.

DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
            // Do whatever you want when the date is selected.
            editText.setText(String.format("%04d-%02d-%02d", year, month+1, day));
        }
    }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH));

    datePickerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {

        }
    });

Ответ 6

В этой части кода:

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

                public void onDateSet(DatePicker view, int year, 
                                      int monthOfYear, int dayOfMonth) {
                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();
                }
            };

вам также нужно выполнить onClick():

public void  onClick  (DialogInterface  dialog, int which) {
   if (which == Button.NEGATIVE) {
      //Cancel
   }
}

API для Button.NEGATIVE

Ответ 7

Следующий код помог мне решить проблему с кнопкой "Отмена", не закрывая окно выбора даты. Благодаря eSilver для решения.

dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() 
{
    public void onClick(DialogInterface dialog, int which) {
        if (which == DialogInterface.BUTTON_NEGATIVE) {
            datePickerPlugin.success(new PluginResult(PluginResult.Status.OK, ""), callBackId);
            dateDialog.hide();
        }
    }
});

Ответ 8

Извините за появление древнего вопроса, но я столкнулся с подобной проблемой и написал простого преемника стандартного DatePickerDialog с правильным поведением. См. в этом разделе. Надеюсь, это поможет.

Ответ 9

public void showDatePicker() {

        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog datePicker = new DatePickerDialog(getActivity(), (view, year1, month1, day1) -> {
            Calendar c1 = Calendar.getInstance();
            c1.set(year1, month1, day1);
            Date date = c1.getTime();
            SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yyyy");
            String d = formatter.format(date);
//            btnDatePicker.setText(d);
//            selectedDate = d;
        }, year, month, day) {
            @Override
            public void onClick(@NonNull DialogInterface dialog, int which) {
                super.onClick(dialog, which);
                if (which == DialogInterface.BUTTON_POSITIVE) {
                } else if (which == DialogInterface.BUTTON_POSITIVE) {

                }
            }
        };

        datePicker.getDatePicker().setMinDate(System.currentTimeMillis());
        datePicker.show();
    }

Ответ 10

Я добавил некоторый дополнительный код в @PeteH отличный ответ (который позволяет реагировать на нажатие пользователем даты или отмены).

private void showDatePickerDialog() {
    final int[] year = new int[1];
    final int[] month = new int[1];
    final int[] day = new int[1];
    isDataSet = false;  // this is used by the onDismiss handler

    // Set initial time period in DatePicker to current month
    Calendar calendarCurrent = Calendar.getInstance();
    month[0] = calendarCurrent.get(Calendar.MONTH);
    day[0] =   calendarCurrent.get(Calendar.DAY_OF_MONTH);
    year[0] =  calendarCurrent.get(Calendar.YEAR);

    DatePickerDialog datePickerDialog = new DatePickerDialog(
            MyActivity,
            new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int y, int m, int d) {
            isDataSet =true;
            //user confirms date
            year[0] =y;
            month[0] = m;
            day[0] =d;

            //do something with date selected

        }
    },
            year[0],
            month[0],
            day[0]
    );
    datePickerDialog.setOnDismissListener(mOnDismissListener);
    datePickerDialog.show();
}
private DialogInterface.OnDismissListener mOnDismissListener =new DialogInterface.OnDismissListener() {
    public void onDismiss(DialogInterface dialog) {
        if (!isDataSet){

            //do something if user cancels

    }
};

Ответ 11

Попробуйте следующее:

if (resultCode == RESULT_CANCELED) {
    Toast toast = Toast.makeText(this,"Datepicker Canceled", 10000);
    toast.show();
    return;
}