Android:CalendarView OnDateChangeLIstener

lem*_*des 15 android android-calendar

我已经实现了这个监听器,以便在单击某个日期时显示某些内容,但问题是当我向下滚动CalendarView时,它会自动显示一些内容但我没有点击任何内容,我只是向下滚动到在CalendarView的另一个月,然后有一个,比如一个Toast或一个Log,无论哪个(我猜它是有道理的,因为监听器本身触发`onDateChange,因为向下滚动日历也会改变当前选择的日期).所以我的问题是,是否有任何CalendarView的监听器,我可能只使用ondateChange监听器的替代方案,以避免当我向下滚动calendarView转到另一个月时它会自动解雇lisntener的情况.

任何知道CalendarView的替代列表器或任何人都知道解决方法的人?请分享

Ale*_*ksa 8

滚动时,日历onSelectedDayChange方法的行为类似于您单击不同的日期,但不会更改当前日期设置.所以HFDO5是对的,你只需要在创建日历时保存当前日期: Long date = calendar.getDate();

并检查它onSelectedDayChange.

if(callendar.getDate() != date){
date = calendar.getDate(); //new current date
//date is changed on real click...do things..

}
Run Code Online (Sandbox Code Playgroud)


小智 7

我遇到了同样的问题并找到了解决办法.

创建"长日期"变量,当您启动日历窗口时,将当前日期保存在此变量中.

Long date;
cv = (CalendarView)findViewById(R.id.calendarView1);
date = cv.getDate();
Run Code Online (Sandbox Code Playgroud)

现在在监听器中只检查新日期是否与日历相同:

cv.setOnDateChangeListener(new OnDateChangeListener(){
        public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
            if(cv.getDate() != date){
                date = cv.getDate();
                Toast.makeText(view.getContext(), "Year=" + year + " Month=" + month + " Day=" + dayOfMonth, Toast.LENGTH_LONG).show();
            }               
        }
    });
Run Code Online (Sandbox Code Playgroud)

它对我有用:)

  • 这对`setOnDateChangeListener`没有帮助,它总是返回最初选择的日期,因此永远不会显示Toast。如果我错了纠正我。 (2认同)