Abd*_*lah 15 android android-datepicker
我知道这有很多问题,但没有一个解决方案适合我,所以这个问题.我想限制用户在今天之前选择日期,但我无法这样做.
public class DatePickerDialogFragment extends DialogFragment {
private OnDateSetListener listener;
public void setListener(OnDateSetListener listener) {
this.listener = listener;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getContext(), listener, year, month, day);
dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
return dialog;
}
}
Run Code Online (Sandbox Code Playgroud)
我表现为:
DatePickerDialogFragment fragment = new DatePickerDialogFragment();
fragment.setListener(dateSetListener);
fragment.show(getSupportFragmentManager(), "Choose booking date");
Run Code Online (Sandbox Code Playgroud)
我希望用户不应该在今天之前选择日期.正如你所看到的,我setMinDate()用今天的时间调用了方法,但它没有效果.该对话框显示今天之前的日期为灰色但可选择.
我也尝试按照一些stackoverflow答案中的建议进行子类DatePickerDialog和覆盖onDateChanged,但没有任何成功.
Raj*_*esh 19
试试这个方法
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getContext(), listener, year, month, day);
Field mDatePickerField;
try {
mDatePickerField = dialog.getClass().getDeclaredField("mDatePicker");
mDatePickerField.setAccessible(true);
} catch (Exception e) {
e.printStackTrace();
}
dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
而不是你的
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getContext(), listener, year, month, day);
dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
EDIT1:
我也遇到过这个问题,用户可以选择不可选择的日期Android L 5.0.2.目前存在的bug报告在这里.它解决了Android L 5.1.0.
对于此问题的临时解决方案,您可以将所选日期与当前系统日期进行比较,并根据该日期添加一些条件.我用这个作为我的解决方法
EDIT2:
添加onDateSent()方法DatePickerDialogFragment并检查它是否早于您设置的日期setMinDate().如果是这样,那么只需显示DatePickerDialog再次.
final long today = System.currentTimeMillis() - 1000;
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
//If user tries to select date in past (or today)
if (calendar.getTimeInMillis() < today)
{
//Make them try again
DatePickerDialogFragment fragment = new DatePickerDialogFragment();
fragment.setListener(dateSetListener);
fragment.show(getSupportFragmentManager(), "Choose booking date");
Toast.makeText(this, "Invalid date, please try again", Toast.LENGTH_LONG).show();
}
else
{
//success
}
}
Run Code Online (Sandbox Code Playgroud)
获取系统时间并从中减去1秒
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
dialog = new DatePickerDialog(act, listener, year, month, day);
dialog.getDatePicker().setMinDate(System.currentTimeMillis() -1000);
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31531 次 |
| 最近记录: |