Obtener valor de DialogFragment

Quiero que el DialogFragment devuelva un valor que se ingresó en editQuantity cuando se descartó.

Pero no estoy consiguiendo ninguna manera de hacer que funcione. Puedo hacer esto pasando el valor a través de la intent pero eso destruye el progreso de la actividad actual.

¿Hay alguna manera que no sea pasar a través de la intent que me devolverá el valor?

 package com.example.myprojectname; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.text.InputType; import android.util.Log; import android.widget.EditText; public class QuantityDialogFragment extends DialogFragment implements OnClickListener { private EditText editQuantity; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { editQuantity = new EditText(getActivity()); editQuantity.setInputType(InputType.TYPE_CLASS_NUMBER); return new AlertDialog.Builder(getActivity()) .setTitle(R.string.app_name) .setMessage("Please Enter Quantity") .setPositiveButton("OK", this) .setNegativeButton("CANCEL", null) .setView(editQuantity) .create(); } @Override public void onClick(DialogInterface dialog, int position) { String value = editQuantity.getText().toString(); Log.d("Quantity: ", value); dialog.dismiss(); } } 

Suponiendo que desea obtener resultados para la actividad que llama 🙂 pruebe este fragmento de código:

 public class QuantityDialogFragment extends DialogFragment implements OnClickListener { private EditText editQuantity; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { editQuantity = new EditText(getActivity()); editQuantity.setInputType(InputType.TYPE_CLASS_NUMBER); return new AlertDialog.Builder(getActivity()).setTitle(R.string.app_name).setMessage("Please Enter Quantity") .setPositiveButton("OK", this).setNegativeButton("CANCEL", null).setView(editQuantity).create(); } @Override public void onClick(DialogInterface dialog, int position) { String value = editQuantity.getText().toString(); Log.d("Quantity: ", value); MainActivity callingActivity = (MainActivity) getActivity(); callingActivity.onUserSelectValue(value); dialog.dismiss(); } } 

Y en Su actividad añada:

 public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); QuantityDialogFragment dialog = new QuantityDialogFragment(); dialog.show(getSupportFragmentManager(), "Dialog"); } /** * callback method from QuantityDialogFragment, returning the value of user * input. * * @param selectedValue */ public void onUserSelectValue(String selectedValue) { // TODO add your implementation. } } 

Tomando esta idea un poco más, creé una interfaz de escucha dentro del diálogo y la implementé en la actividad principal.

 public interface OnDialogResultListener { public abstract void onPositiveResult(String value); public abstract void onNegativeResult(); } public void setOnDialogResultListener(OnDialogResultListener listener) { this.onDialogResultListener = listener; } 

Llame a onNegativeResult () dentro de un overriden onCancel(DialogInterface) y onPositiveResult(String) donde desea que su diálogo devuelva el valor.

Nota: no se olvide de dismiss() su diálogo después de llamar onPositiveResult() o la ventana de diálogo permanecerá abierta.

A continuación, dentro de su actividad principal puede crear un oyente para el diálogo, así:

 QuantityDialogFragment dialog = new QuantityDialogFragment(); dialog.setOnDialogResultListener(new QuantityDialogFragment.OnDialogResultListener() { @Override public void onPositiveResult(String value) { //Do something... } @Override public void onNegativeResult() { //Do something... } }); 

Esto hará que su diálogo sea más fácil de reutilizar más tarde.

  • AlertDialog MultiChoiceItems - Seleccionando 2 elementos solo a la vez
  • Artículos de AlertDialog no mostrados
  • Android: Establecer margen para editar texto en el cuadro AlertDialog
  • Ventajas de DialogFragment sobre AlertDialog
  • ¿En qué contexto debo utilizar AlertDialog.Builder?
  • AlertDialog vs AlertDialog.Builder
  • Cuadro de diálogo de alerta dos botones
  • Cómo lograr algo como "terminar" en una clase de no actividad en android?
  • "Evite pasar null como la raíz de vista" advertencia al inflar vista para su uso por AlertDialog
  • Cómo establecer el contenido de setSingleChoiceItems en onPrepareDialog?
  • Android EditText en AlertDialog parece demasiado amplio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.