utilizar setresult como activity android android-activity android-dialog

setresult - Dentro de Android Dialog, ¿cómo configurar onActivityResult para startActivityForResult?



setresult android (5)

En el constructor del cuadro de diálogo, pase la referencia de Actividad principal, luego puede usar en el cuadro de diálogo como este,

parentActivity.startActivityForResult(intent, CODE);

Desde una actividad, puedo configurar fácilmente el onActivityResult() y llamar a startActivityForResult() y todo funciona bien.

Ahora, necesito llamar a startActivityForResult() desde el Diálogo. Pero no puedo configurar onActivityResult() , creo que Dialog no es una Activity .

¿Cómo obtengo el resultado?

Intento algo como esto dentro de un diálogo pero falló.

//create new Intent Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, m_PicUri); ((Activity) getContext()).startActivityForResult(intent, Const.TAKE_PIC_ACTIVITY_RET_CODE);


Puedes declarar tu Activity para tener un tema de Dialog . Mira en esta pregunta SO: Actividad de Android como un diálogo

Cambiarías esto en tu archivo AndroidManifest.xml :

<activity android:theme="@android:style/Theme.Dialog" />

Debería poder utilizar startActivityForResult() como normal. Sé que el programa de ejemplo BluetoothChat Android usa algo similar para devolver el dispositivo Bluetooth que eligió de una lista de Dialog .


Puedes usar DialogFragment lugar de Dialog. Porque el diálogo es secundario a su actividad. Cuando inicia la actividad con startActivityForResult (), su cuadro de diálogo se cierra.

Otro ejemplo de uso de devolución de llamada

Crear interfaz

public interface DialogCallback { void getResults(String results); }

Crear DialogFragment

public class DialogFragment extends DialogFragment { DialogCallback dialogCallback; public DialogFragment setCallBack(DialogCallback dialogCallback){ this.dialogCallback = dialogCallback; return this; } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return super.onCreateDialog(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.your_layout, container, false); return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); dialogCallback.getResults("hello"); } }

En tu actividad

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new DialogFragment().setCallBack(dialogCallback).show(getFragmentManager(),""); } DialogCallback dialogCallback = new DialogCallback() { @Override public void getResults(String results) { if(results!=null){ Log.e(TAG,results); } } };

Salida

Cuando descarte el DialogFragment verá el "hola" Inicie sesión en su actividad


Si su diálogo es un fragmento de diálogo puede usar

getActivity().startActivityForResult(intent);

De esta forma, el resultado se envía a la actividad que creó el diálogo.


Use el paquete de compatibilidad y luego construya su diálogo usando DialogFragment