【问题标题】:Set Date Boundaries on Date Picker Fragment在日期选择器片段上设置日期边界
【发布时间】:2013-02-09 23:38:37
【问题描述】:

我有一个非常简单的日期选择器片段:

public class DatePickerFragment extends DialogFragment implements
        OnDateSetListener {

    @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(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        Activity a = getActivity();

        Button dateDueButton = (Button) a.findViewById(R.id.dateDue);
        String sYear = Integer.toString(year).substring(2, 4);
        String sMonth = Integer.toString(month + 1);
        String sDay = Integer.toString(day);
        dateDueButton.setText(sMonth + "/" + sDay + "/" + sYear);
    }
}

我希望能够设置“日期边界”。例如,如果当前日期是 2 月 9 日,我希望只在片段上显示 2 月 10 日或之后的日期。我该如何实施呢?

【问题讨论】:

    标签: android datepicker android-fragments


    【解决方案1】:

    您将通过使用此方法从 DatepickerDialog 获取 Datepicker 对象 getDatePicker()

    public class DatePickerFragment extends DialogFragment implements
        OnDateSetListener {
       private DatePickerDialog datepic;
    @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);
        datepic=new DatePickerDialog(getActivity(), this, year, month, day);
        return datepic;
    }
    
    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        Activity a = getActivity();
    
        Button dateDueButton = (Button) a.findViewById(R.id.dateDue);
        String sYear = Integer.toString(year).substring(2, 4);
        String sMonth = Integer.toString(month + 1);
        String sDay = Integer.toString(day);
        dateDueButton.setText(sMonth + "/" + sDay + "/" + sYear);
    }
    
    public void setMinimumDate(Calendar mintime){
       datepic.getDatePicker().setMinDate(mintime.getTimeInMillis());
    }
    public void setMaximumDate(Calendar maxtime){
       datepic.getDatePicker().setMaxDate(maxtime.getTimeInMillis());
    }
    

    使用公共方法 setMinimumDate 和 setMaximumDate 设置边界

    【讨论】:

      【解决方案2】:

      DatePicker 类中使用minDatemaxDate 参数。

      请注意,这些是 API 级别 11 类,因此您必须自己实现此功能以实现向后兼容性。

      【讨论】:

        【解决方案3】:

        好吧,您可以将当前系统日期与用户选择的日期进行比较。如果用户选择的日期小于当前日期,那么您可以在日期上设置边界。否则,您可以继续节省开支。提供代码 sn-ps 可能会对您有所帮助,

            public static long getTimeDiffInDays(String birthday) {
            int beforeLenght = birthday.length();
            int afterLenght = birthday.replace("/", "").length();
            int checkFormat = beforeLenght - afterLenght;
            String newBirthday;
            if (checkFormat == 2) {
                int lastIndex = birthday.lastIndexOf("/");
                newBirthday = birthday.substring(0, lastIndex).trim();
            } else {
                newBirthday = birthday.trim();
            }
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
            Calendar now = Calendar.getInstance();
        
            Date newDate = new Date();
            Date olddate = new Date();
            try {
                newDate = sdf.parse(sdf.format(now.getTime()));
                olddate = sdf.parse(newBirthday);
            } catch (ParseException e) {
        
                e.printStackTrace();
            }
            long datediff = (olddate.getTime() - newDate.getTime())
                    / (1000 * 60 * 60 * 24);
        
            if (datediff < 0)
                return datediff + 365;
            else
                return datediff;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-24
          • 1970-01-01
          • 1970-01-01
          • 2016-02-29
          • 2019-07-01
          • 2021-11-05
          • 1970-01-01
          相关资源
          最近更新 更多