6/5/14

Popup selección de fecha. (Android)

Vamos a ver rapiadmente como crear en un activiy un popup para seleccionar una fecha. El popup queda así en el emulador de mi móvil:




Lo que tenemos que usar es la siguiente clase, se puede poner como interna dentro de un Activity o usarla desde fuera, como cada uno prefierá.

public static class DatePickerFragment extends DialogFragment
                           
implements DatePickerDialog.OnDateSetListener {

   
@Override
   
public Dialog onCreateDialog(Bundle savedInstanceState) {
       
// Use the current date as the default date in the picker
       
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);

       
// Create a new instance of DatePickerDialog and return it
       
return new DatePickerDialog(getActivity(), this, year, month, day);
   
}

   
public void onDateSet(DatePicker view, int year, int month, int day) {
       
// Do something with the date chosen by the user
   
}
}

Tengo que decir que esta clase me la paso un compañero de trabajo que también estaba aprendiendo Android, pero esta muy pero que muy bien para crear de forma rápida y sencilla un popup que permita seleccionar una fecha.

El evento onDateSet es el que recuperará la fecha seleccionada por el usuario. Hay que tener en cuenta que enero es el mes 0.

Para llamar al popup de seleccionar la fecha sólo tienes que hacer esto


DialogFragment newFragment = new DatePickerFragment();

newFragment.show(getFragmentManager(), "datePicker");
En estos momentos ya solo tendriamos que crear un botón o lo que queramos, para cuando se pulse, muestre el popup.

Yo en la APP que estaba haciendo, he creado dos botones con dos editText, para seleccionar la fecha desde y fecha hasta, y lo he implementado de la siguiente forma.

En el metodo onManejadorEventoFecha capturo el botón que se pulsa y llamo a la clase que hemos creado.

public void onManejadorEventoFecha(View v) {                                    
  DialogFragment newFragment = new DatePickerFragment();
  Bundle args = new Bundle();
  int vista = v.getBottom(); //.getId();
  args.putLong("vista",vista);
  newFragment.setArguments(args);
  newFragment.show(getFragmentManager(), "datePicker");

 }


Y en el método de OnDataSet de la clase que hemos creado, recuperamos las fechas seleccionadas en el evento y en función del id del botón pulsado las cargamos en un elemento de texto u otro.

public void onDateSet(DatePicker view, int year, int month, int day) {
  long vista = getArguments().getLong("vista");
  
  // Do something with the date chosen by the user
  DateFormat df =  DateFormat.getDateInstance();
  Date fecha = new Date(year,month,day);
  if (vista == 158){
      et_fechIni.setText(String.valueOf(df.format(fecha)));
  }else if (vista == 309){
      et_fechast.setText(String.valueOf(df.format(fecha)));
  }

}

Un saludo, gracias.


1 comentario :

  1. Buenas tardes amigo, ahi no importa la version del android ? siempre se va a mostrar como datepicker spinner ? Gracias

    ResponderEliminar