2015-10-15 8 views
6

Sto lavorando a un'app in cui sto utilizzando una selezione di data e ora personalizzata. Ho creato una finestra di dialogo e al suo interno visualizzo la data e l'ora rispettivamente, ora voglio impostare un limite minimo e massimo per il selezionatore di date. Come non si dovrebbe essere in grado di selezionare la data precedente da oggi e non più di un mese prima. Questo è il mio codiceCome impostare un limite minimo e massimo per un selettore di date in Android?

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      final DatePicker picker = new DatePicker(getActivity()); 
      try { 
       Field f[] = picker.getClass().getDeclaredFields(); 
       for (Field field : f) { 
        if (field.getName().equals("mYearPicker") || field.getName().equals("mYearSpinner")) { 
         field.setAccessible(true); 
         Object yearPicker = new Object(); 
         yearPicker = field.get(picker); 
         ((View) yearPicker).setVisibility(View.GONE); 
        } 
       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      picker.setCalendarViewShown(false); 
      picker.setMinDate(new Date().getTime()); 

      builder.setTitle("Please select date on which you would be leaving :") 
        .setView(picker) 
        .setPositiveButton("OK", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 
            SimpleDateFormat parseFormat = new SimpleDateFormat("EEE dd MMM"); 
            Date date1 = new Date(); 
            date1.setDate(picker.getDayOfMonth()); 
            date1.setMonth(picker.getMonth()); 
            final String s = parseFormat.format(date1); 
            Log.e("DATE", s); 
            SimpleDateFormat sdf=new SimpleDateFormat("MM-dd-yyyy"); 
            Date date2=new Date(); 
            date2.setDate(picker.getDayOfMonth()); 
            date2.setMonth(picker.getMonth()); 
            final String s2=sdf.format(date2); 


            //Time picker 
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
            final TimePicker picker = new TimePicker(getActivity()); 
            picker.setIs24HourView(true); 
            builder.setTitle("Please select time at which you would be leaving :") 
              .setView(picker) 
              .setPositiveButton("OK", 
                new DialogInterface.OnClickListener() { 
                 public void onClick(DialogInterface dialog, int whichButton) { 
                  int hour = picker.getCurrentHour(); 
                  int minute = picker.getCurrentMinute(); 
                  leaving.setTextSize(14); 

                  leaving.setText(s + " " + hour + ":" + minute); 
                  inTime=s2+" "+hour+":"+minute; 
                  Log.e("inTime ",inTime); 
                 } 
                }) 
              .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
               public void onClick(DialogInterface dialog, int whichButton) { 
                leaving.setText(""); 
                inTime=""; 
                dialog.dismiss(); 
               } 
              }).create().show(); 
            //Time picker 
           } 
          } 
        ) 
        .setNegativeButton("Cancel", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 
            leaving.setText(""); 
            inTime=""; 
            dialog.dismiss(); 
           } 
          } 
        ) 
        .create().show(); 

Si prega di aiuto. Grazie

+0

per l'impostazione data minima si può usare 'datePickerobject.setMinDate (System.currentTimeMillis() - 1000);' –

+0

per il massimo 'datePickerobject.setMaxDate (lastdate_converted_in_long);' –

risposta

8

Prova questo, Questo mostra da oggi alla prossima data di 5 anni nella finestra di dialogo DatePicker.

public class MainActivity extends Activity { 

    TextView txtDatePicker; 
    Calendar cal,cal1; 
    long maxDate; 
    Date date; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     cal = Calendar.getInstance(); 
     cal1 = Calendar.getInstance(); 

     txtDatePicker = (TextView) findViewById(R.id.txtDatePicker); 
     txtDatePicker.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       DatePickerDialog dialog = new DatePickerDialog(MainActivity.this, new OnDateSetListener() { 

        @Override 
        public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { 
         // TODO Auto-generated method stub 
         Toast.makeText(MainActivity.this, ""+arg1+"/"+(arg2+1)+"/"+arg3, Toast.LENGTH_SHORT).show(); 
        } 
      }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); 
      dialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
      cal1.add(Calendar.YEAR, 5); 
      dialog.getDatePicker().setMaxDate(cal1.getTimeInMillis()); 
      dialog.show(); 
     } 
    }); 
    } 
} 
+0

Grazie. Funziona ora – ManishNegi

1

Utilizzare questo codice.
Io uso questo codice nella mia applicazione.

// Global declaration 

    Calendar preferDate1 = new GregorianCalendar(); 
    Calendar preferDate2 = new GregorianCalendar(); 
    final Calendar c = Calendar.getInstance(); 
    year = c.get(Calendar.YEAR); 
    month = c.get(Calendar.MONTH); 
    day = c.get(Calendar.DAY_OF_MONTH); 
    private int year, month, day; 


    // here preferredDate1 and preferredDate2 are textview 
    preferredDate1.setOnClickListener(new OnClickListener() { 

       @SuppressLint("NewApi") 
       @Override 
       public void onClick(View v) { 
        DatePickerDialog dp = new DatePickerDialog(MainActivity.this, prefferedDate1Picker, preferDate1 
          .get(Calendar.YEAR), preferDate1.get(Calendar.MONTH), preferDate1.get(Calendar.DAY_OF_MONTH)); 
        dp.getDatePicker().setMinDate(c.getTimeInMillis()); 
        dp.show(); 
       } 
      }); 

    private final DatePickerDialog.OnDateSetListener prefferedDate1Picker = new DatePickerDialog.OnDateSetListener() { 

      @Override 
      public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
       preferDate1 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay); 
       preferredDate2.setText(""); 
       preferredDate1.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/" 
         + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1))) 
         + "/" + selectedYear); 

      } 
     }; 


// This will set date based on preferredDate1 
// change here according to your need. If you want to add or remove one month then set based on data. In this I add one day in second data picker. 
preferredDate2.setOnClickListener(new OnClickListener() { 

      @SuppressLint("NewApi") 
      @Override 
      public void onClick(View v) { 
        DatePickerDialog dp2 = new DatePickerDialog(MainActivity.this, prefferedDate2Picker, preferDate2 
          .get(Calendar.YEAR), preferDate2.get(Calendar.MONTH), preferDate2.get(Calendar.DAY_OF_MONTH)); 

        long mili = preferDate1.getTimeInMillis() + 86400000L; 
        dp2.getDatePicker().setMinDate(mili); 
        dp2.show(); 

      } 
     }); 

     private final DatePickerDialog.OnDateSetListener prefferedDate2Picker = new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
      preferDate2 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay+1); 
      preferredDate2.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/" 
        + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1))) 
        + "/" + selectedYear); 

     } 
    }; 
+0

Grazie per la risposta. Sto usando la funzione setMinDate(). Sta mostrando le date precedenti in colore sfumato, ma se clicco su quelle date sono state selezionate. E per favore dimmi come usare setMaxDate() per un periodo di un mese – ManishNegi

+0

Ho apportato alcune modifiche al mio esistente e ora sta lavorando per MinDate ma come aggiungere per la data massima? – ManishNegi

+0

setMaxDate() non funziona? –

Problemi correlati