calendarView.setOnDateChangeListener android studio - PullRequest
0 голосов
/ 04 сентября 2018

каждый раз, когда пользователь выбирает дату, TextView показывает только текущую дату

public void initOverall(){
    TextView dateTest = (TextView)findViewById(R.id.cnvrt);
    CalendarView calendarView = (CalendarView)findViewById(R.id.calendarView);
    calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String selectedDates = sdf.format(new Date(calendarView.getDate()));
            dateTest.setText(selectedDates);

        }
    });
}

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Поскольку вы только что выбрали дату, но не получили ее как onSelectedDayChange stage.

И выбранная вами дата была сохранена в параметрах onSelectedDayChange .

Вы можете попробовать следующий код:

public void initOverall(){
        final TextView dateTest = (TextView)findViewById(R.id.cnvrt);
        final CalendarView calendarView = (CalendarView)findViewById(R.id.calendarView);
        calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String selectedDates = sdf.format(new Date(year-1900,month,dayOfMonth));
                dateTest.setText(selectedDates);
            }
        });
    }
0 голосов
/ 04 сентября 2018

java.time

public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
    LocalDate date = LocalDate.of(year, Month.values()[month], dayOfMonth);
    String selectedDates = date.toString();
    dateTest.setText(selectedDates);
}

Как было сказано в комментариях, вам нужно подобрать дату, которую пользователь выбрал из аргументов, переданных onSelectedDayChange. К сожалению, переданное month основано на 0, число в интервале от 0 для января до 11 для декабря. Month.values()[month] - мой трюк для получения правильного Month объекта. Если вы предпочитаете, вы можете вместо этого просто добавить 1:

    LocalDate date = LocalDate.of(year, month + 1, dayOfMonth);

Далее я использую тот факт, что LocalDate.toString создает нужный формат, поэтому нам не нужен явный форматер. Формат ISO 8601.

Вопрос: Могу ли я использовать java.time на Android?

Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (как мне сказали, от уровня API 26) современный API поставляется встроенным.
  • В Java 6 и 7 получить ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На более старых (Android) версиях Android используется ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 04 сентября 2018
CalendarView v = new CalendarView( this );
 v.setOnDateChangeListener( new CalendarView.OnDateChangeListener() {
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
       this.calendar = new GregorianCalendar( year, month, dayOfMonth );
    }//met
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...