2010-05-28 5 views
17

я использую следующий пример выбора датыКак определить отмена щелчка диалогового окна datepicker?

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

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

может любой один наставит меня, как для достижения этой цели.

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

ответ

60

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

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 
     } 
    } 
    }); 
+0

именно то, что я искал, я хотел установить onClick, интересно, что вам нужно переопределить кнопки по умолчанию – Blundell

+1

get error: метод setButton (int, String, new DialogInterface.OnClickListener() {}) не определено для типа DatePickerActivity.DatePickerFragment –

+0

Вот чего я хочу. Благодарю тебя. :) – Jigar

-3

Попробуйте это:

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

В каком случае следует использовать его? – UMAR

+0

вы будете стрелять деятельность Datepicker по щелчку, так и на общественном ничтожной onActivityResult() событие и можно назвать этот код общественности недействительным onActivityResult() { если (ResultCode == RESULT_CANCELED) { Тост Тост = Toast.makeText (это, «Datepicker Cancelled», 10000); тост.показать(); возвращение; } } –

+0

Не знаю, о чем это - нет DatePickerActivity, это диалог, поэтому он остается в рамках действия. – esilver

0

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

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

+1

оба не работают – UMAR

+1

он никогда не вызывает событие onClick. – UMAR

+0

не работает, не пробуйте это –

4

Если вы хотите, чтобы выполнить различные действия в зависимости от того, выбран ли пользователь дату или вы не можете использовать 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 
       } 
      } 
     }; 
0

Следующий код помог мне решить проблему с кнопкой «Отмена», не закрывая окно выбора даты. Благодаря 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(); 
     } 
    } 
}); 
+0

Теперь вы можете рассказать мне, как узнать внутри моей кнопки onclick, какую дату пользователь настроил? я имею в виду внутри выше функции, я хочу yy, mm, dd coz, я снова их установлю в своем edittext ?? –

0

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

3

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

setOnCancelListener(OnCancelListener listener) 
setOnDismissListener(OnDismissListener listener) 

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

1
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(); 
1

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) { 

     } 
    }); 
Смежные вопросы