FirstActivity.JavaTiene un FragmentA.Javaque llama startActivityForResult().
SecondActivity.Javallame finish()pero onActivityResultnunca se llame lo que está escrito FragmentA.Java.
FragmentA.Java código:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// some code
Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
getActivity().startActivityForResult(i, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
getActivity();
if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
//some code
}
}
SecondActivity.Java código:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some code
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
He intentado depurar el código, pero onAcitvityResult()nunca me han llamado.
android
android-fragmentactivity
Sr. Roshan Pawar
fuente
fuente

Respuestas:
Debe escribir
onActivityResult()en suFirstActivity.Javacomo sigueEntonces esto llamará a tu fragmento
onActivityResult()Editar: la solución es reemplazar
getActivity().startActivityForResult(i, 1);constartActivityForResult(i, 1);fuente
onActivityresult()deFirstAcivity.Javaobtiene la llamada yonActivityresult()deFragmentA.Javanunca me llamaron. Por favor ayuda.startActivityForResultlugar degetActivity().start...? Porque hasta donde puedo ver, está anulando la definición deonActivityResultcon su propia definición, en la Actividad (es decir, esto se comporta exactamente igual que si la anulación en la respuesta no existiera).La respuesta de Kevin funciona, pero hace que sea difícil jugar con los datos usando esa solución.
La mejor solución es no comenzar
startActivityForResult()a nivel de actividad.en tu caso no llames
getActivity().startActivityForResult(i, 1);En su lugar, ¡solo úsalo
startActivityForResult()y funcionará perfectamente bien! :)fuente
Debe escribir onActivityResult () en su FirstActivity.Java de la siguiente manera
Esto activará el método onActivityResult de fragmentos en FirstActivity.java
fuente
El fragmento ya tiene
startActivityForResult, lo que llamaríaonActivityResultal fragmento si lo usa, en lugar degetActivity()...fuente
Lo más importante, que todos faltan aquí es ... El launchMode of FirstActivity debe ser singleTop. Si es singleInstance, se llamará a onActivityResult en FragmentA justo después de llamar al método startActivityForResult. Por lo tanto, no esperará la llamada del método finish () en SecondActivity.
Siga los siguientes pasos: Definitivamente funcionará como funcionó para mí también después de una larga investigación.
En el archivo AndroidManifest.xml, haga launchMode of FirstActivity.Java como singleTop.
En FirstActivity.java, anule el método onActivityResult. Como esto llamará a onActivityResult of FragmentA.
En FragmentA.Java, anule el método onActivityResult
Llamada
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);de FragmentA.Javafinish();Método de llamada en SecondActivity.javaEspero que esto funcione.
fuente
Podríamos llamar
startActivityForResult()directamente desde Fragment, por lo que debe llamar enthis.startActivityForResult(i, 1);lugar degetActivity().startActivityForResult(i, 1);La actividad enviará el resultado de la actividad a su fragmento.
fuente
Que sea tarde para la respuesta. Pero será útil para cualquiera.
En mi caso, quiero llamar a la actividad desde Fragment y setResult desde el fragmento.
He usado getContext of Fragment Like.
Y establecer el resultado del fragmento
Ahora obteniendo resultados para fragmentar con
fuente
onActivityResult () de MAinActivity llamará, onActivityResult () de Fragement no llamará porque el fragmento se coloca en la Actividad, por lo que obviamente vuelve a MainActivity
fuente
No llame
finish()alonCreate()método, entonces funciona bien.fuente
llame a su
onActivityresult()en ParentActivity.fuente