Android Datepicker Fragment – ¿Cómo hacer algo cuando el usuario establece una fecha?

Estoy siguiendo el tutorial aquí: http://developer.android.com/guide/topics/ui/controls/pickers.html

Tengo cosas para trabajar y el datepicker aparece. Sin embargo, estoy atascado en cómo actuar cuando el usuario fija la fecha.

Veo que tienen este método:

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

Pero eso no hace nada si pongo algún código en él.

No estoy familiarizado con Java, así que no estoy seguro de qué código adicional se necesita para actualizar un textview con la fecha elegida.

He añadido este código:

 private DatePickerDialog.OnDateSetListener mDateListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int month, int day) { updateDate(year, month, day); } }; public void updateDate(int year, int month, int day) { TextView bdate = (TextView)findViewById(R.id.birthDate); Date chosenDate = new Date(year, month, day); java.text.DateFormat dateFormat = DateFormat.getDateFormat(getApplicationContext()); bdate.setText(dateFormat.format(chosenDate)); } 

Pero eso no hace nada.

Encontré esta pregunta casi exacta: Get date from datepicker using dialogfragment

Sin embargo, en esa solución no utilizar (EditSessionActivity) limitar la clase DatePickerFragment a trabajar con sólo EditSessionActivity?

Debe utilizar una fábrica estática para pasar argumentos al DialogFragment. De los documentos ,

"Cada fragmento debe tener un constructor vacío, por lo que se puede instanciar al restaurar el estado de su actividad.Se recomienda encarecidamente que las subclases no tienen otros constructores con parámetros, ya que estos constructores no serán llamados cuando el fragmento es re-instanciado; , Los argumentos pueden ser suministrados por la persona que llama con setArguments (Bundle) y posteriormente recuperados por el fragmento con getArguments (). "

Del mismo modo, la subclase Fragmento debe ser estática, por lo que puede volver a instanciarse a sí mismo sin depender de la actividad padre o Fragmento. Si no se adhiere a estas pautas, a veces se producen fallos o errores cuando su Fragmento intenta reanudarse.

La forma recomendada de crear un DialogFragment, desde los documentos de Android, es usar un método de fábrica estático. He aquí un ejemplo de un fragmento selector de fecha que toma una fecha inicial y un OnDateChangedListener:

 public static class DatePickerFragment extends DialogFragment{ private OnDateSetListener onDateSetListener; static DatePickerFragment newInstance(Date date, OnDateSetListener onDateSetListener) { DatePickerFragment pickerFragment = new DatePickerFragment(); pickerFragment.setOnDateSetListener(onDateSetListener); //Pass the date in a bundle. Bundle bundle = new Bundle(); bundle.putSerializable(MOVE_IN_DATE_KEY, date); pickerFragment.setArguments(bundle); return pickerFragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { super.onCreateDialog(savedInstanceState); Date initialDate = (Date) getArguments().getSerializable(MOVE_IN_DATE_KEY); int[] yearMonthDay = ymdTripleFor(initialDate); DatePickerDialog dialog = new DatePickerDialog(getActivity(), onDateSetListener, yearMonthDay[0], yearMonthDay[1], yearMonthDay[2]); return dialog; } private void setOnDateSetListener(OnDateSetListener listener) { this.onDateSetListener = listener; } private int[] ymdTripleFor(Date date) { Calendar cal = Calendar.getInstance(Locale.US); cal.setTime(date); return new int[]{cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)}; } } 

A continuación, puede crear uno de estos fragmentos de diálogo de la siguiente manera:

 DatePickerFragment.newInstance(yourDate, yourOnDateSetListener); 

Creo que uno puede utilizar el DialogFragments aquí:

 DialogFragment newFragment = new DatePickerFragment(); newFragment.show(getSupportFragmentManager(), "datePicker"); 

Definir el DatePickerFragment e implementar el método a continuación

 public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date chosen by the user DateEdit.setText(day + "/" + (month + 1) + "/" + year); } 

Tomado de Android DialogFragment Ejemplo .

En mi experiencia este código funciona perfectamente !, Estoy usando win10 Android Studio 2.2 …

 import android.app.Dialog; import android.support.v4.app.DialogFragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.app.DatePickerDialog; import android.widget.DatePicker; import android.widget.EditText; import java.util.Calendar; public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);} public void datePicker(View view){ DatePickerFragment fragment_date = new DatePickerFragment(); fragment_date.show(getSupportFragmentManager(),"datePicker");} @Override public void onDateSet(DatePicker view, int year, int month, int day) { String day_x = ""+ day ,month_x = ""+(month+1); if (day < 9 ){ day_x = "0" + day_x;} if (month < 9 ){ month_x = "0" + month_x;} ((EditText) findViewById(R.id.txtDate)).setText(day_x + "/" + month_x + "/" + year);} public static class DatePickerFragment extends DialogFragment { @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() ,(DatePickerDialog.OnDateSetListener)this,day,month,year);}} } 

Tengo un "textView txtDate" y un "botón con onclick = datePicker"

  • Mostrar la selección del año primero en la vista del calendario de Android
  • Android datepicker set fecha máxima hace 14 años
  • Diálogo de divisor Android
  • Eliminar el año de DatePickerDialog
  • El nombre del mes aparece con el número M + en el cuadro de diálogo datePicker en android
  • Cómo cambiar los colores "Dividers" de Dialog de DatePicker de Android
  • Ocultar el campo Año en Android DatePicker?
  • ¿Cómo usar OnDateChangedListener, OnDateSetListener sin usar datepickerdialog?
  • Implementar el selector horizontal de fechas en Android
  • DatePickerDialog.OnDateSetListener no obtiene una devolución de llamada en dispositivos Samsung
  • Establecer el timbre de unix de Android en un DatePicker
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.