Recuperar y establecer datos de DialogFragment (DatePicker)
Mi clase DialogFragment se invoca cuando presiono un botón en una actividad. Quiero que la fecha fijada con este DialogFragment sea exhibida en el texto de los botones. FindViewById se niega a ser reconocido por la clase.
Encontré una pregunta similar, pero no puedo relacionarla con mi caso.
- Cómo agregar un fragmento a un diseño de un DialogFragment?
- Dos selectores de fechas en la misma actividad Android
- Android: FragmentTransaction ocultar no funciona para DialogFragment
- ¿Debemos usar setTargetFragment ()? Pensé que los fragmentos no deberían comunicarse entre sí
- ¿Cómo administrar los diálogos de pantalla completa en Android?
Código:
-
Botón que llama el fragmento de diálogo:
public void datepicker(View v) { DialogFragment newFragment = new DatePickerFragment(); newFragment.show(getFragmentManager(), "datePicker"); }
-
Código para fragmento de diálogo:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceSateate) { 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(), this, year, month, day); } public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date chosen } } }
- Cómo retener correctamente un DialogFragment a través de la rotación?
- Pantalla completa DialogFragment (sobre ActionBar) en Android
- Android DialogFragment está en blanco
- Después de cambiar la orientación de la pantalla, el diálogo aparece aparentemente sin ninguna llamada
- OnActivityResult en el fragmento de diálogo
- ¿Cómo configurar el ancho y la altura de DialogFragment?
- Interceptar DialogFragment descartar dentro de la actividad
- DailogFragment - getArguments / setArguments - ¿por qué pasar los argumentos en un lote?
En el método en su DialogFragment que se encarga de ser notificado cuando el usuario fija la fecha, haga esto
Button activityButton = (Button)getActivity().findViewById(R.id.myButton); activityButton.setText (myDate);
Crear Clase para DatePicker Fragmento:
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Calendar now = Calendar.getInstance(); year = now.get(Calendar.YEAR); month = now.get(Calendar.MONTH); day = now.get(Calendar.DATE); return new DatePickerDialog(getActivity(), this, year, month, day); } public void onDateSet(DatePicker view, int year, int month, int day) { orderDateEditText.setText(year + "-" + (month + 1) + "-" + day); } }
Llame a este fragmento al hacer clic en ImageButton :
/** Create DatePicker dialog on click of OrderDateEditText **/ orderDatePickerButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub DialogFragment newFragment = new SelectDateFragment(); newFragment.show(getFragmentManager(), "DatePicker"); } });
En Mes hay más 1 porque DatePicker por defecto toma mes de 0 a 11 para enero a diciembre.
Gracias..
aquí hay un buen patrón a seguir:
- crear una interfaz de escucha en su diálogo para manejar el botón correspondiente presiona en el diálogo
- implementarlo en la actividad inicial
- cuando el usuario presiona "bien" o "cancelar", llame a los métodos de escucha
- haz lo que tengas que hacer en el impl del oyente para actualizar la vista de la actividad
algo como,
class MyDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { static interface Listener { void onOkay(MyObject result); void onCancel(); } ... @Override public Dialog onCreateDialog(Bundle savedInstanceState) { ... // set this as a listener for ok / cancel buttons return new AlertDialog.Builder(activity)...whatever... .setPositiveButton(R.string.ok, this) .setNegativeButton(R.string.cancel, this).create(); } @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { if (getActivity() instanceof Listener) { ((Listener)getActivity()).onOkay(...); } } else { if (getActivity() instanceof Listener) { ((Listener)getActivity()).onCancel(); } } } } class MyActivity extends Activity implements MyDialogFragment.Listener { ... @Override public void onOkay(MyObject result) { // update activity view here with result } @Override public void onCancel() { // anything? } }
en su caso, el "resultado" pasado en el método onOkay()
sería el objeto Date escogido por el usuario en el diálogo.
Un Fragment
no es una View
. Si desea encontrar un fragmento, use findFragmentById
del FragmentManager
.