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