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.

  • Cómo lograr algo como "terminar" en una clase de no actividad en android?
  • Cómo deshabilitar algunos elementos en listview que se encuentra en el cuadro de diálogo Alert
  • Solicitud de contraseña en android
  • Android: AlertDialog - Usuario haga clic en otro lugar
  • Mostrar un temporizador de cuenta regresiva en el cuadro de diálogo de alerta
  • Cómo alinear el centro de diálogo personalizado en android?
  • Cómo implementar una vista personalizada de AlertDialog
  • ¿Por qué este AlertDialog.Builder.setIcon no muestra el ícono ic_menu_info?
  • Problema de espaciado de diálogo de alerta con texto y editar texto
  • AlertDialog - no descartar en clic de artículo
  • Cómo establecer el contenido de setSingleChoiceItems en onPrepareDialog?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.