просмотр календаря прослушиватель onclick для сегодняшней даты не работает

Как установить прослушиватель 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>

person John Franky    schedule 30.08.2014    source источник


Ответы (4)


диалоговому классу нужна библиотека BetterPickers

    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.класс

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


    }
person ShweLiam    schedule 30.08.2014

Как говорит имя setOnDateChangeListener, этот метод вызывается, когда вы меняете дату в своем календаре. Неважно, сегодня это или нет. Когда вы открываете календарь, по умолчанию отображается сегодняшняя дата. Поэтому, когда вы нажимаете «сегодня», метод не вызывается. Потому что нет никаких изменений. Выберите другую дату, затем попробуйте выбрать «сегодня». Итак, этот метод вызывается при изменении. В SO на этот вопрос уже был дан ответ. Просто создайте собственный класс CalendarView, который вы будете использовать позже.

person Joe Rakhimov    schedule 30.08.2014
comment
Спасибо за предложение, однако есть ли способ отключить выбор сегодняшней даты по умолчанию? или есть ли другие способы инициировать другое действие по щелчку сегодняшней даты? - person John Franky; 30.08.2014

OnGlobalLayoutListener сделает свое дело. Итак, если вы попробуете:

calendarView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener(){
        @Override
        public void onGlobalLayout()
        {}
    });
person Alexey O.    schedule 06.08.2015

person    schedule
comment
вы должны улучшить свой ответ, объяснив, что делает ваш код. и это может быть очень оценено всеми будущими пользователями. - person DaFois; 16.11.2017
comment
если вы хотите отключить все прошлые даты до текущей даты, чтобы вы могли использовать этот код - person sumit trivedi; 21.11.2017