首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓: CalendarView OnDateChangeLIstener

安卓: CalendarView OnDateChangeLIstener
EN

Stack Overflow用户
提问于 2012-09-28 21:46:05
回答 5查看 17.3K关注 0票数 16

我已经实现了这个侦听器,以便当某个日期被点击时显示一些东西,但问题是当我向下滚动CalendarView时,它会自动显示一些东西,但我没有单击任何东西,我只是在CalendarView中向下滚动到另一个月,然后就会出现一个,比如说吐司或日志,不管是哪一个(我想这是有意义的,因为侦听器本身会触发`onDateChange,而且向下滚动日历也会改变当前选择的日期)。所以我的问题是,是否有任何用于CalendarView的侦听器,我可以使用ondateChange侦听器的替代方案,以避免当我向下滚动calendarView转到另一个月时,它会自动触发lisntener的情况。

有谁知道CalendarView的替代监听器,或者有谁知道解决方法?请分享

EN

回答 5

Stack Overflow用户

发布于 2013-10-25 17:57:14

当你滚动日历时,onSelectedDayChange方法的行为就像你点击了不同的日期,但是不会改变当前的日期设置。所以HFDO5是对的,你只需要在创建日历时保存当前日期:Long date = calendar.getDate();

并在onSelectedDayChange中检查它。

代码语言:javascript
复制
if(callendar.getDate() != date){
date = calendar.getDate(); //new current date
//date is changed on real click...do things..

}
票数 8
EN

Stack Overflow用户

发布于 2012-11-20 20:49:04

我只是遇到了同样的问题,并找到了一个解决方法。

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

代码语言:javascript
复制
Long date;
cv = (CalendarView)findViewById(R.id.calendarView1);
date = cv.getDate();

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

代码语言:javascript
复制
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();
            }               
        }
    });

它对我很有效:)

票数 7
EN

Stack Overflow用户

发布于 2015-11-11 01:06:53

最后,我决定我需要在CalendarView下面显示一个"OK“按钮,这样就可以选择日期并取消日历。

因为当你点击当前日期时,什么都不会发生,而当你滚动时,你会收到对OnDateChangeListener的呼叫。

带有黑色蒙版背景的日历布局示例,您可以单击将其忽略:

代码语言:javascript
复制
<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>

然后是示例代码:

代码语言:javascript
复制
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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12641250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档