16

特定の日付がクリックされたときに何かを表示するために、このリスナーを既に実装していますが、問題は、CalendarView を下にスクロールすると、自動的に何かが表示されましたが、何もクリックしなかったため、下にスクロールしただけですCalendarView で別の月を指定すると、Toast または Log のどちらかが表示されます (リスナー自体が onDateChange を起動し、カレンダーを下にスクロールすると現在選択されている日付も変更されるため、これは理にかなっていると思います)。だから私の質問は、CalendarViewを下にスクロールして別の月に移動すると自動的にリスナーが起動されるという状況を避けるために、ondateChangeリスナーの代わりに使用できるCalendarViewのリスナーがあるかどうかです。

CalendarView の代替リスナーを知っている人、または回避策を知っている人はいますか? 共有してください

4

5 に答える 5

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..

}
于 2013-10-25T09:57:13.577 に答える
7

私はちょうど同じ問題を抱えていて、それに対する回避策を見つけました。

「長い日付」変数を作成し、カレンダーウィンドウを開始するときに、現在の日付をこの変数に保存します。

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();
            }               
        }
    });

それは私のために働いた:)

于 2012-11-20T12:49:03.613 に答える
3

最後に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);
}
于 2015-11-10T17:06:53.460 に答える
0

これを回避する方法は、HoloEverywhere(カスタマイズに利用可能なソースコード)のカレンダーを使用し、これを呼び出すコードをコメントアウトして、onDateTappedメソッドで呼び出すことでした。これは期待どおりのことです。また、ICS以前のデバイスでも機能します。

于 2013-01-30T12:49:46.657 に答える