阻止在timePicker DialogFragment中选择过去的日期

ton*_*099 2 android datepicker android-datepicker android-dialogfragment

我在编辑文本上应用以下代码来选择日期.

public class DatePickerFragment extends DialogFragment
{

    private OnDateSetListener listener;

    public DatePickerFragment(OnDateSetListener listener)
    {
        this.listener = listener;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        return new DatePickerDialog(getActivity(), listener, year, month, day);
    }
}

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
    //do some stuff
}

void showDateDialog()
{
    DatePickerFragment newFragment = new DatePickerFragment(this);
    newFragment.show(getFragmentManager(), "date_picker");
}
Run Code Online (Sandbox Code Playgroud)

但是,我想将所有过去的日期变灰,以便不允许用户选择任何日期.这可以通过代码吗?或者我应该在选择后手动检查日期是否是过去的日期?

Sho*_*uri 11

使用setMinDate()函数.它设置自getDefault()时区自1970年1月1日00:00:00以来的最小日期(以毫秒为单位).将最短日期设置为今天的日期,因此用户将无法通过它.像下面这样的东西onCreateDialog:

final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);

DatePickerDialog d = new DatePickerDialog(getActivity(), listener, year, month, day);  
DatePicker dp = d.getDatePicker(); 
dp.setMinDate(c.getTimeInMillis());
return d;
Run Code Online (Sandbox Code Playgroud)

  • 我不认为解决方案意味着使用碎片,我可能是错的. (2认同)