我已经实现了这个侦听器,以便当某个日期被点击时显示一些东西,但问题是当我向下滚动CalendarView时,它会自动显示一些东西,但我没有单击任何东西,我只是在CalendarView中向下滚动到另一个月,然后就会出现一个,比如说吐司或日志,不管是哪一个(我想这是有意义的,因为侦听器本身会触发`onDateChange,而且向下滚动日历也会改变当前选择的日期)。所以我的问题是,是否有任何用于CalendarView的侦听器,我可以使用ondateChange侦听器的替代方案,以避免当我向下滚动calendarView转到另一个月时,它会自动触发lisntener的情况。
有谁知道CalendarView的替代监听器,或者有谁知道解决方法?请分享
发布于 2013-10-25 17:57:14
当你滚动日历时,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..
}发布于 2012-11-20 20:49:04
我只是遇到了同样的问题,并找到了一个解决方法。
创建“长日期”变量,当您启动日历窗口时,将当前日期保存在此变量中。
Long date;
cv = (CalendarView)findViewById(R.id.calendarView1);
date = cv.getDate();现在,在监听器中,只需检查新日期是否与日历相同:
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();
}
}
});它对我很有效:)
发布于 2015-11-11 01:06:53
最后,我决定我需要在CalendarView下面显示一个"OK“按钮,这样就可以选择日期并取消日历。
因为当你点击当前日期时,什么都不会发生,而当你滚动时,你会收到对OnDateChangeListener的呼叫。
带有黑色蒙版背景的日历布局示例,您可以单击将其忽略:
<LinearLayout
android:id="@+id/calendar_layout"
android:onClick="dismissCalendar"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp"
android:background="@color/black_mask">
<CalendarView
android:id="@+id/calendar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white"
android:showWeekNumber="false"
android:firstDayOfWeek="2"
/>
<TextView
android:onClick="selectDate"
android:text="@string/select_date"
android:background="@color/colorPrimary"
style="@style/settings_button"/>
</LinearLayout>然后是示例代码:
private void openCalendar(Date date) {
calendar.setDate(date.getTime());
calendarLayout.setVisibility(View.VISIBLE);
}
public void selectDate(View view) {
Date date = new Date(calendar.getDate());
// do whatever you need with date
dismissCalendar(view);
}
public void dismissCalendar(View view) {
calendarLayout.setVisibility(View.INVISIBLE);
}https://stackoverflow.com/questions/12641250
复制相似问题