2013-02-28 56 views
0

問題機智onSelectedDayChange是,當我打開日曆視圖,並單擊聚焦的一天,沒有任何反應。例如,我想看看今天的細節。現在我打開日曆視圖,今天是重點。所以我不得不點擊其他日子點擊今天查看詳細信息。有沒有什麼竅門能解決這個問題?替代onSelectedDayChange calendarview android

回答

0

CalendarView派生自可以生成onClick()事件的View。您可以嘗試從視圖中捕獲onClick()事件。只是一個想法

0

我做了以下類來解決這個問題。

public class CustomCalendarView extends CalendarView { 

    private final String LOG_HEADER = "CAL:VW"; 
    private Date previousSelectedDate = new Date(); 
    private OnDateChangeListener listener; 
    private CheckSameSelectedDateAsyncTask task = new CheckSameSelectedDateAsyncTask(); 

    public CustomCalendarView(Context context) { 
     super(context); 
    } 

    public CustomCalendarView(Context context, AttributeSet attribute) { 
     super(context, attribute); 
    } 

    public CustomCalendarView(Context context, AttributeSet attribute, int defStyle) { 
     super(context, attribute, defStyle); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     if ((task.getStatus() == AsyncTask.Status.PENDING) || (task.getStatus() == AsyncTask.Status.FINISHED)) { 
      task = new CheckSameSelectedDateAsyncTask(); 
      task.execute(); 
     } 
     return false; 
    } 

    private void checkSameSelectedDate() { 
     Date selectedDate = new Date(super.getDate()); 
     if (selectedDate.getDay() == previousSelectedDate.getDay() && 
       selectedDate.getMonth() == previousSelectedDate.getMonth() && 
       selectedDate.getYear() == previousSelectedDate.getYear()) { 
      if (listener != null) { 
       this.listener.onSameSelectedDayChange(this, selectedDate.getYear(), selectedDate.getMonth(), selectedDate.getDay()); 
      } 
     } 
     this.previousSelectedDate = selectedDate; 
    } 

    public void setSameSelectedDayChangeListener(OnDateChangeListener listener) { 
     this.listener = listener; 
    } 

    public interface OnDateChangeListener extends CalendarView.OnDateChangeListener { 
     void onSameSelectedDayChange(CalendarView view, int year, int month, int day); 
    } 

    private class CheckSameSelectedDateAsyncTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       //Note: Breaking point between 75 - 100 
       Thread.sleep(300); 
      } catch (InterruptedException ex) { 
       Thread.currentThread().interrupt(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      checkSameSelectedDate(); 
     } 
    } 
}