web-dev-qa-db-fra.com

Android - OnDateChangedListener - comment définissez-vous cela?

Il y a un écouteur d'événements dans Android appelé DatePicker.OnDateChangedListener. J'essaie de définir l'écouteur de la date de modification d'une vue DatePicker comme suit:

DatePicker dp = new DatePicker(getContext());
dp.setOnDateChangedListener(this); 
//where this is my activity extends DatePicker.OnDateChangedListener

Mais devinez quoi? Le sélecteur de date n'a pas de méthode appelée setOnDateChangedListener.

Ma question est:

  1. Comment définir alors un écouteur de changement de date dans Android?
  2. S'il n'est pas possible de définir un écouteur de changement de date, à quoi sert cet événement?

Toute documentation/tutoriel sera très utile.

55
Tawani

Une fois que vous avez créé votre DatePicker, vous devez l'initialiser avec la date que vous souhaitez afficher en premier. C'est le point auquel vous pouvez ajouter votre écouteur .

Voir DatePicker.init(int, int, int, OnDateChangedListener) .

104
Christopher Orr

Le meilleur moyen est

        DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {

                @Override
                public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
                    Log.d("Date", "Year=" + year + " Month=" + (month + 1) + " day=" + dayOfMonth);

                }
            });
36
turbandroid

Cette vue est en fait une combinaison de quatre vues, et ce sont:

Trois filateurs

One CalendarView

À partir de OnDateChangeListener, l'objet que vous avez transmis à la méthode init sera simplement transmis à CalendarView contenu, et je pense que vous savez qu'il existe une méthode setOnDateChangeListener dans la bonne vieille CalendarView ...... .... ..

Dans la classe DatePicker, il existe une méthode appelée getCalendarView, et c'est la méthode que vous pouvez appeler si vous souhaitez mettre la main sur le CalendarView contenu.

Une fois que vous avez mis la main sur le CalendarView contenu, alors, inutile de le dire, vous pouvez appeler son setOnDateChangeListener

11
user2389347

Quelque chose comme ça:

DatePicker myDatePicker = (DatePicker) findViewById(R.id.my_date_picker);
myDatePicker.getCalendarView().setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        Log.d("tag", "finally found the listener, the date is: year " + year + ", month "  + month + ", dayOfMonth " + dayOfMonth);
    }
});
9
Andrew
3
CommonsWare