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.
- Android Alert Dialog reemplaza el color azul por defecto con otro color
- Cómo utilizar el fragmento de diálogo? (ShowDialog obsoleta) Android
- El cuadro de diálogo se muestra dos veces cuando se pulsa de nuevo
- ¿Hay alguna manera de evitar que AlertDialog cierre con entradas no válidas?
- Deshabilitar la atenuación de fondo en ProgressDialog / AlertDialog en Android
¿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(); } }
- Android: AlertDialog con vista personalizada y esquinas redondeadas
- Configurar la barra de título de AlertBox Color de fondo
- EditText se expande demasiado lento dentro de AlertDialog en android
- Atributos de estilo de estilo personalizado AlertDialog
- Cómo establecer la validación nulo en el cuadro de diálogo edittextpreference
- Cómo establecer los elementos de elección única dentro de AlertDialog?
- Android: ¿Cómo puedo configurar el AlertDialog de ancho y altura, y el botón del estilo AlertDialog?
- ¿Cómo se muestra un diálogo en android sin un contexto de actividad?
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.
- Tarjeta SIM dual Android
- Código nativo – cómo obtener la pila de llamadas de función (backtrace) mediante programación