我正在使用Android CalendarView创建一个简单的日历应用。当用户按下日历视图中的上一个或下一个按钮时,我需要获得月份。当用户单击这些按钮时,CalendarView没有任何方法可以获取月份,因此我尝试使用以下代码来提取月份。
ViewGroup vg = (ViewGroup) calendarView.getChildAt(0);
View subView = vg.getChildAt(0);
但由于某种原因,ViewGroup持有DayPickerViewPager小部件和2个AppcompatImageButtons(前一个和下一个按钮),但没有TextView或类似的东西,其中包含实际的月份名称。
subView包含DayPickerViewPager。有谁知道如何在上一个/下一个按钮点击上获得月份?
提前谢谢
答案 0 :(得分:0)
当用户点击这些按钮时,CalendarView没有任何方法来获取月份
我认为确实如此;至少在您选择给定日期时。
long getDate ()
以毫秒为单位获取所选日期
您可以将其处理为Calendar
对象,您可以从中获取月份。
参考:Java - Milliseconds to Month/Year (not just the current time)
当用户按下日历视图中的上一个或下一个按钮时,我需要获得月份
您需要使用setOnDateChangeListener
来捕获最终选择的日期。
当用户尚未进行选择时,为什么需要“下一个/上一个”按钮的动作事件并不清楚。
但是,你做到了,那么你需要在setOnClickListener
这两个AppCompatImageButtons
上>>> numbers = [1, 2, 3]
>>> numbers[0:0] = [4, 5, 6]
>>> numbers
[4, 5, 6, 1, 2, 3]
。但是,一旦你自己这样做,你将覆盖现有的点击监听器。
答案 1 :(得分:0)
不幸的是,您不能使用Android的默认CalenderView实施月份更改事件。但是,here可以使用另一种自定义的MaterialCalendarView,它同时提供日期和月份更改侦听器。
使用该视图的示例代码如下:
MaterialCalendarView calendarView = new MaterialCalendarView(getActivity());
calendarView.setOnMonthChangedListener(new OnMonthChangedListener() {
@Override
public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) {
// Do something here
Date selectedDate = date.getDate();
}
});
还可以使用MaterialCalendarView以类似的方式实现日期更改侦听器。