0

非常に単純な日付ピッカー フラグメントがあります。

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 日以降の日付のみをフラグメントに表示したいと考えています。これを実装するにはどうすればよいですか?

4

3 に答える 3

2

このメソッドgetDatePicker()を使用して、DatepickerDialog から Datepicker オブジェクトを取得します。

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 を使用して境界を設定する

于 2015-02-11T09:16:09.973 に答える
1

minDateクラスのパラメータとmaxDateパラメータを使用しますDatePicker

これらはAPIレベル11クラスであるため、下位互換性のためにこの機能を自分で実装する必要があることに注意してください。

于 2013-02-13T17:36:05.307 に答える
0

さて、現在のシステム日付を取得して、ユーザーが選択した日付と比較できます。ユーザーが選択した日付が現在の日付より前の場合、日付に境界を設定できます。それ以外の場合は、節約を続けることができます。提供されたコード スニペットが役立ちます。

    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;
}
于 2013-02-14T06:27:36.903 に答える