Search code examples
androiddatepickeronclicklistenercalendarview

calendar view onclick listener for todays date does not work


How to set a onclick listener for a calendar view for "TODAYS DATE" ? the code is working for onclick yesterdays date or tomorrows date, but it does not work for todays date ? can somebody help on this please ?

Code:

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 Code:**

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

Solution

  • dialog class need 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");
    }
    }
    

    // Otherwise create BaseActivity class

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