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.
- ¿AlertDialog admite WebView?
- ¿Cómo cierro AlertDialog cuando hago clic en el elemento ListView
- Configurar la barra de título de AlertBox Color de fondo
- Android: ¿Cómo puedo configurar el AlertDialog de ancho y altura, y el botón del estilo AlertDialog?
- Cómo configurar parte del texto en negrita cuando se utiliza AlertDialog.setMessage () 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(); } }
- Cómo establecer la posición de un AlertDialog de la pantalla en la parte superior en Android?
- El método alertDialog.getButton () da una excepción de puntero nulo android
- Cómo cerrar AlertDialog.Builder sin hacer clic en ningún botón
- AlertDialog con NumberPicker procesado incorrectamente
- Android AlertDialog Box No se muestra
- Diálogo de alerta de Android: cómo ocultar el botón Aceptar después de presionarlo
- Cómo hacer una capa transparente sobre el elemento CardIView?
- ¿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