Kotlin中MaterialCalendarView标题格式化后切换不更新问题
MaterialCalendarView切换月份时标题不更新的解决办法
问题出在你设置标题格式化器的逻辑上:你提前将当前时间格式化为固定的字符串date,之后每次标题需要更新时,都直接返回这个固定值,自然不会随月份切换变化。
正确的做法是利用setTitleFormatter提供的CalendarDay参数,基于当前显示的月份日期来动态生成标题文本,修改后的代码如下:
方案1(使用SimpleDateFormat)
val pattern = "MMM,yyyy" val simpleDateFormat = SimpleDateFormat(pattern) calendarView.apply { setTitleFormatter { day -> val calendar = Calendar.getInstance().apply { set(day.year, day.month, day.day) } simpleDateFormat.format(calendar.time) } }
方案2(使用Java 8+ DateTimeFormatter,更简洁)
如果项目支持Java 8及以上特性,推荐使用更现代的日期API:
val formatter = DateTimeFormatter.ofPattern("MMM,yyyy", Locale.getDefault()) calendarView.setTitleFormatter { day -> // MaterialCalendarView的month从0开始,LocalDate的月份从1开始,所以要+1 LocalDate.of(day.year, day.month + 1, day.day).format(formatter) }
内容的提问来源于stack exchange,提问作者Vishal Thakur
相关产品推荐
相关产品推荐

