2014-05-20 30 views
34

Cách tắt các ngày trong quá khứ trong bộ chọn ngày của Android?Cách tắt các ngày trong quá khứ trong bộ chọn ngày của Android?

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     // set date picker as current date 
     return new DatePickerDialog(this, datePickerListener, year, month, 
       day); 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     year = selectedYear; 
     month = selectedMonth+1; 
     day = selectedDay; 

     startdate.setText(new StringBuilder().append(day).append("-") 
       .append(getMonth(month + 1)).append("-").append(year) 
       .append(" ")); 
    } 
}; 
+0

DatePickerDialog datePickerDialog = new DatePickerDialog (getActivity(), ngày tháng, myCalendar.get (Calendar.YEAR), myCalendar.get (Calendar.MONTH), myCalendar.get (Calendar.DAY_OF_MONTH)); datePickerDialog.getDatePicker(). SetMinDate (System.currentTimeMillis() - 1000); datePickerDialog.show(); – Dilip

Trả lời

121

Bạn có thể làm

datePicker.setMinDate(System.currentTimeMillis() - 1000); 

mà bộ ngày hôm nay làm ngày tối thiểu và tất cả các ngày trong quá khứ đã bị tắt.

datePicker là một đối tượng của DatePicker nếu bạn đang sử dụng một đối tượng của DatePickerDialog bạn có thể làm

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

Lưu ý: setMinDate đã được giới thiệu trong API 11

+0

Cảm ơn bạn đã trả lời .. Tôi nên đặt dòng này ở đâu? – Addy

+0

Nơi bạn tạo đối tượng 'DatePicker' hoặc' DatePickerDialog' – Apoorv

+1

Cảm ơn bạn đã trả lời. Nhưng khi tôi sử dụng giải pháp trên, nó đã cho tôi sự cố trong ứng dụng của tôi. Vì vậy, tôi đã thay đổi "System.currentTimeMillis() - 1000" thành "System.currentTimeMillis() - 10000" và ứng dụng của tôi hoạt động hoàn hảo. Bạn có thể vui lòng lemme biết lý do tại sao tôi nhận được tai nạn trên trừ 1000 nhưng không phải trên 10000 – user3705697

6

này là làm thế nào tôi làm điều đó:

public class DatePickerFragment extends DialogFragment { 
OnDateSetListener ondateSet; 
Calendar c; 
int year = 0, month = 0, day = 0; 

public DatePickerFragment() { 
} 

public void setCallBack(OnDateSetListener ondate) { 
    ondateSet = ondate; 
} 

public static DatePickerFragment newInstance(Bundle bundle) { 
    DatePickerFragment myFragment = new DatePickerFragment(); 
    myFragment.setArguments(bundle); 
    return myFragment; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // final Calendar c = Calendar.getInstance(); 
//if else for null arguments 
    if (getArguments() != null) { 
     year = getArguments().getInt("year"); 
     month = getArguments().getInt("month"); 
     day = getArguments().getInt("day"); 
     c = Calendar.getInstance(); 
     c.set(year, month, day); 

    } else { 
     c = Calendar.getInstance(); 
     year = c.get(Calendar.YEAR); 
     month = c.get(Calendar.MONTH); 
     day = c.get(Calendar.DAY_OF_MONTH); 
     Log.d("else", "else"); 
    } 


    DatePickerDialog picker = new DatePickerDialog(getActivity(), 
      ondateSet, year, month, day); 
    picker.getDatePicker().setMinDate(c.getTime().getTime()); 
    Log.d("picker timestamp", c.getTime().getTime() + ""); 
    return picker; 
} 
} 

Đây là cách bạn khởi tạo trình chọn:

Bundle bundle = new Bundle(); 
     Calendar c = Calendar.getInstance(); 
     bundle.putInt("year", c.get(Calendar.YEAR)); 
     bundle.putInt("month", c.get(Calendar.MONTH)); 
     bundle.putInt("day", c.get(Calendar.DAY_OF_MONTH)); 
     DatePickerFragment fragment = DatePickerFragment 
       .newInstance(bundle); 
     fragment.setCallBack(dateSet); 
     fragment.show(getActivity().getSupportFragmentManager(), null); 

Việc triển khai của tôi cảm thấy tự do khi thay đổi. Lưu ý rằng mã này đặt tâm trí là ngày của mạng theo mặc định. Ngoài ra newInstance cũng quan trọng.

+1

Đó là một trong những gì tôi tìm kiếm .. Cảm ơn –

11

Phương pháp này sẽ hoạt động bình thường.

//Get yesterday's date 
Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -1); 

//Set yesterday time milliseconds as date pickers minimum date 
DatePickerDialog datePickerDialog = new DatePickerDialog(context, myDateListener, year, month, day); 
datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis()); 
datePickerDialog.show(); 
1

Bạn có thể sử dụng dòng này vào mã của bạn ...

private Calendar cal; 
private int day; 
private int month; 
private int year; 

static final int DATE_PICKER_ID = 1111; 
TextView textView; 

    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      cal = Calendar.getInstance(); 
      day = cal.get(Calendar.DAY_OF_MONTH); 
      month = cal.get(Calendar.MONTH); 
      year = cal.get(Calendar.YEAR); 
      showDialog(DATE_PICKER_ID); 

     } 
    }); 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DATE_PICKER_ID: 
      // create a new DatePickerDialog with values you want to show 

      DatePickerDialog datePickerDialog = new DatePickerDialog(this, datePickerListener, year, month, day); 
      Calendar calendar = Calendar.getInstance(); 

      calendar.add(Calendar.DATE, 0); // Add 0 days to Calendar 
      Date newDate = calendar.getTime(); 
      datePickerDialog.getDatePicker().setMinDate(newDate.getTime()-(newDate.getTime()%(24*60*60*1000))); 
      return datePickerDialog; 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 
    // the callback received when the user "sets" the Date in the 
    // DatePickerDialog 
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 

     textViewTime.setText(selectedDay + "/" + (selectedMonth + 1) + "/" + selectedYear); 
    } 
}; 
+0

Và những gì cho 'calendar.add (Lịch) .DATE, 0); 'và' Lịch lịch' nếu nó không được sử dụng? Date newDate = new Date(); là đủ. – CoolMind

0

Ok vì vậy tôi đang sử dụng MaterialDatePicker Thư viện và nó quá đơn giản để thiết lập ngày tối thiểu trên đó.

DatePickerDialog mDatePickerDialog = DatePickerDialog.newInstance(listener, 
       mTime.year, mTime.month, mTime.monthDay); 
mDatePickerDialog.setYearRange(2016, 2036); 
Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(System.currentTimeMillis() - 1000); 
mDatePickerDialog.setMinDate(c); 
Các vấn đề liên quan