2014-08-30 57 views
1

如何爲日曆視圖設置onclick監聽器「TODAYS DATE」?該代碼適用於onclick昨天的日期或明天的日期,但它不適用於今天的日期?有人可以幫忙嗎?日曆視圖onclick監聽器今天的日期不起作用

代碼:

MainActivity.java

final CalendarView calendarview=(CalendarView)findViewById(R.id.Calendarview); 
final Button selectDate=(Button)findViewById(R.id.Date_seletcion_btn); 

selectDate.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View arg0) { 
// TODO Auto-generated method stub 

calendarview.setVisibility(View.VISIBLE); 


} 
}); 

calendarview.setClickable(true); 

//calendarview.getSelectedDateVerticalBar(); 
/*calendarview.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { 

@Override 
public void onSelectedDayChange(CalendarView calendarview, int year, int month, 
int day) { 
// TODO Auto-generated method stub 
int day1, month1, year1; 

day1=day; 
month1=month; 
year1=year; 


Calendar calendar=Calendar.getInstance(); 


clickeddate=calendarview.getDate(); 
calendar.setTimeInMillis(clickeddate); 

//ArrayList<> array=calendar.getTouchables(); 

Toast.makeText(getApplicationContext(), "Date Selected: " + day,Toast.LENGTH_LONG).show(); 


Intent homein=new Intent(getApplicationContext(),HomePageActivity.class); 

homein.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

homein.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

startActivity(homein); 
finish(); 

} 
}); */ 

** XML代碼:**

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/Calendar_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_marginTop="120dp" 
android:gravity="center_horizontal" 
android:orientation="vertical" > 

<!-- 
<LinearLayout 
android:id="@+id/Calendar_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"></LinearLayout> 
--> 

<Button 
android:id="@+id/Date_seletcion_btn" 
style="?android:attr/borderlessButtonStyle" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginBottom="20dp" 
android:layout_marginTop="20dp" 
android:background="@drawable/button_states" 
android:text="@string/calendarselection" /> 

<!-- 
<DatePicker 
android:id="@+id/datepicker" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:visibility="gone" 
/> 
--> 

<CalendarView 
android:id="@+id/Calendarview" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_marginBottom="20dp" 
android:layout_marginLeft="20dp" 
android:layout_marginRight="20dp" 
android:visibility="gone" 
android:clickable="true" /> 


</LinearLayout> 

回答

0

對話框類需要betterpickers libary

public class DateDialog { 

private static final SimpleDateFormat sSDF = new SimpleDateFormat("EEE", Locale.US); 
private CalendarDatePickerDialog mDialog; 
private FragmentManager mFragmentManager; 

public DateDialog(FragmentManager fm, OnDateSetListener listener) { 
    mFragmentManager = fm; 
    Calendar c = Calendar.getInstance(); 
    String EEE = sSDF.format(c.getTime()); 
    if (EEE.contains("Sun")) { 
     c.set(Calendar.DAY_OF_MONTH, -2); 
    } 

    mDialog = CalendarDatePickerDialog.newInstance(listener, c.get(Calendar.YEAR), c.get(Calendar.MONTH), 
      c.get(Calendar.DAY_OF_MONTH)); 
} 

public void show() { 
    mDialog.show(mFragmentManager, "calendarDialog"); 
} 
} 

//否則創建BaseActivity類

public abstract class BaseActivity extends FragmentActivity { 
private final SimpleDateFormat sSDF = new SimpleDateFormat("EEE", Locale.US); 
    public void showCalendarDialog(OnDateSetListener listener, FragmentManager fm) { 
    Calendar c = Calendar.getInstance(); 
    String EEE = sSDF.format(c.getTime()); 
    if (EEE.contains("Sun")) { 
     c.set(Calendar.DAY_OF_MONTH, -2); 
    } 

CalendarDatePickerDialog mDialog = CalendarDatePickerDialog.newInstance(listener, c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH)); 
    mDialog.setCancelable(true); 
    mDialog.show(fm, FRAG_TAG_DATE_PICKER); 
} 
} 

MainActivity.class

MainActivity extends FragmentActivity implements OnDateSetListener{ 
private static final SimpleDateFormat sSDF_dmye = new SimpleDateFormat("dd/MM/yyyy  (EEE)", Locale.US); 
//call method when you want to click this action listener 
     //call this mothod on btn click action 

     e.g showCalendarDialog(this, getSupportFragmentManager()); 


    } 
0

正如名字setOnDateChangeListener說,這種方法被調用時,更改日曆上的日期。無論今天與否都無關緊要。當您打開日曆視圖時,默認顯示今天的日期。所以當你點擊「今天」時,方法就不會被調用。因爲沒有變化。選擇另一個日期,然後嘗試選擇「今天」。所以這個方法被稱爲變化。 In SO, this question was already answered。只需創建您將在以後使用的自定義CalendarView類。

+0

謝謝你的建議,但有沒有辦法在默認情況下禁用今天的日期的選擇?或者有沒有其他方法發起另一項點擊今天日期的活動? – 2014-08-30 09:26:05

0

OnGlobalLayoutListener會做的伎倆。 所以,如果你嘗試:

calendarView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener(){ 
     @Override 
     public void onGlobalLayout() 
     {} 
    }); 
0
Calendar disabledCal = Calendar.getInstance(); 
disabledCal.set(Calendar.DATE, disabledCal.get(Calendar.DATE) - 1); 
+1

你應該改進你的回答,並說明你的代碼的作用。所有未來的用戶都會非常感激。 – DaFois 2017-11-16 10:51:32

+0

如果您希望在當前日期之前禁用所有過去的日期,那麼您可以使用此代碼 – 2017-11-21 07:25:57