2015-12-13 19 views
5

Sto provando a creare qualcosa come un'app di promemoria. Voglio consentire all'utente di selezionare la data e l'ora che non è ora (almeno 5 minuti da ora), e voglio anche disabilitare l'utente dalla selezione di una data troppo lontana, ad esempio 30 giorni. Ho creato datePicker e timePicker, li ho fatti apparire al clic del pulsante, ma non ho trovato il modo di impostare i valori minimo e massimo.Datepicker e timepicker - imposta valori max e min in android

public void showDateDialog() { 
btnDate = (Button) findViewById(R.id.buttonDate); 

    btnDate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 
} 
    public void showTimeDialog() { 
    btnTime = (Button) findViewById(R.id.buttonTime); 

    btnTime.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showDialog(TIME_DIALOG_ID); 
     } 
    }); 
} 
@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DATE_DIALOG_ID: 
      // create a new DatePickerDialog with values you want to show 
      return new DatePickerDialog(this, datePickerListener, yearSet, monthSet, daySet); 
     // create a new TimePickerDialog with values you want to show 
     case TIME_DIALOG_ID: 
      return new TimePickerDialog(this, timePickerListener, hourSet, minuteSet, false); 
    } 
    return null; 
} 
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     yearSet = year; 
     monthSet = monthOfYear + 1; 
     daySet = dayOfMonth; 
     btnDate.setText(new SimpleDateFormat("DD").format(daySet) + "-" + new SimpleDateFormat("MMM").format(monthSet) + "-" + yearSet); 
    } 
}; 
private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() { 
    @Override 
    public void onTimeSet(TimePicker view, int hour, int minute) { 
     hourSet = hour; 
     minuteSet = minute; 
     btnTime.setText(hourSet + ":" + new SimpleDateFormat("MM").format(hourSet)); 
    } 
}; 

risposta

5
try this: 

btnDate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       final DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 
        @Override 
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

        } 
       }; 

       Calendar c = Calendar.getInstance(); 
       int mYear = c.get(Calendar.YEAR); 
       int mMonth = c.get(Calendar.MONTH); 
       int mDay = c.get(Calendar.DAY_OF_MONTH); 


       final DatePickerDialog datePickerDialog = new DatePickerDialog(
         Main23Activity.this, datePickerListener, 
         mYear, mMonth, mDay); 
       DatePicker datePicker = datePickerDialog.getDatePicker(); 

       c.add(Calendar.MONTH, +1); 
       long oneMonthAhead = c.getTimeInMillis(); 
       datePicker.setMaxDate(oneMonthAhead); 
       datePicker.setMinDate(System.currentTimeMillis() - 1000); 
       datePickerDialog.show(); 

      } 
     }); 

btnTime.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() { 
        @Override 
        public void onTimeSet(TimePicker view, int hour, int minute) { 

        } 
       }; 
       Calendar c = Calendar.getInstance(); 

       final TimePickerDialog timePickerDialog = new TimePickerDialog(Main23Activity.this,timePickerListener, 
         c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE)+5,false); 
       timePickerDialog.show(); 

      } 
     }); 

è necessario controllare se l'utente seleziona la data di oggi e il tempo è inferiore rispetto alla condizione di tempo corrente però.

+0

Grazie per la risposta. Ha funzionato :) Ora posso impostare correttamente la data. Probabilmente cercherò di combinare i due pulsanti per creare un pulsante dateTimePicker. Penso che renderà più semplice impostare l'ora dopo la selezione della data. Grazie ancora. – Kemo

+0

Si tratta di un approccio molto migliore – Dhina

4

Per DataOicker Prova questa

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.YEAR, cal.MONTH, cal.DAY_OF_MONTH); 
      dialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
      cal1.add(Calendar.YEAR, 5); 
      dialog.getDatePicker().setMaxDate(cal1.getTimeInMillis()); 
      dialog.show(); 
     } 
    }); 
    } 
} 

Per TimePicker provare questo exampel

+0

Grazie Narendra. Apprezzo il link che hai aggiunto (è un passo alla volta che è molto importante per un principiante come me :)). – Kemo

+0

Benvenuto Kemo Redy in qualsiasi momento –

1

ho combinato i raccoglitori di data e ora e ha aggiunto una condizione per TimePicker.

public class TestActivity extends Activity { 

     private Button mPickDate; 
     private TextView mDateDisplay; 
     private TextView mTimeDisplay; 

     final Calendar c = Calendar.getInstance(); 
     private int mYear = c.get(Calendar.YEAR); 
     private int mMonth = c.get(Calendar.MONTH); 
     private int mDay = c.get(Calendar.DAY_OF_MONTH); 
     private int mHour = c.get(Calendar.HOUR_OF_DAY); 
     private int mMinute = c.get(Calendar.MINUTE); 

     static final int TIME_DIALOG_ID = 1; 
     static final int DATE_DIALOG_ID = 0; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_test); 
      }); 

      mDateDisplay = (TextView) findViewById(R.id.dateTextView); 
      mPickDate = (Button) findViewById(R.id.datepicker); 
      mTimeDisplay = (TextView) findViewById(R.id.timeTextView); 

      mPickDate.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

    }); 

    mPickDate.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

} 

// Update date and time 
private void updateDate() { 
    mDateDisplay.setText(
      new StringBuilder() 
        .append(mDay).append("/") 
        .append(mMonth + 1).append("/") 
        .append(mYear).append(" ")); 
    showDialog(TIME_DIALOG_ID); 
} 

public void updateTime() { 
    mTimeDisplay.setText(
      new StringBuilder() 
        .append(pad(mHour)).append(":") 
        .append(pad(mMinute))); 
} 

private static String pad(int c) { 
    if (c >= 10) 
     return String.valueOf(c); 
    else 
     return "0" + String.valueOf(c); 
} 

// Generate DatePickerDialog and TimePickerDialog 
private DatePickerDialog.OnDateSetListener mDateSetListener = 
     new DatePickerDialog.OnDateSetListener() { 

      public void onDateSet(DatePicker view, int year, 
            int monthOfYear, int dayOfMonth) { 
       mYear = year; 
       mMonth = monthOfYear; 
       mDay = dayOfMonth; 
       updateDate(); 
      } 
     }; 

private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
     new TimePickerDialog.OnTimeSetListener() { 
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
       mHour = hourOfDay; 
       mMinute = minute; 

       Calendar c2 = Calendar.getInstance(); 

       if (mYear == c2.get(Calendar.YEAR) 
         && mMonth == c2.get(Calendar.MONTH) 
         && mDay == c2.get(Calendar.DAY_OF_MONTH) 
         && (mHour < c2.get(Calendar.HOUR_OF_DAY) || (mHour == c2.get(Calendar.HOUR_OF_DAY) && mMinute <= (c2.get(Calendar.MINUTE)+10)) 
        ) 
       ) { 
        Toast.makeText(TestActivity.this, "Set time at least 10 minutes from now", Toast.LENGTH_LONG).show(); 
       } else { 
        updateTime(); 
       } 

      } 
     }; 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DATE_DIALOG_ID: 
      DatePickerDialog datePickerDialog = new DatePickerDialog(this, 
        mDateSetListener, 
        mYear, mMonth, mDay); 
      c.add(Calendar.MONTH, +1); 
      long oneMonthAhead = c.getTimeInMillis(); 
      datePickerDialog.getDatePicker().setMaxDate(oneMonthAhead); 
      datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
      return datePickerDialog; 

     case TIME_DIALOG_ID: 
      TimePickerDialog timePickerDialog = 
        new TimePickerDialog(this, 
          mTimeSetListener, mHour, mMinute, false); 

      return timePickerDialog; 
    } 
    return null;} 
}