FirstActivity.Java
Tiene un FragmentA.Java
que llama startActivityForResult()
.
SecondActivity.Java
llame finish()
pero onActivityResult
nunca 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.Java
como sigueEntonces esto llamará a tu fragmento
onActivityResult()
Editar: la solución es reemplazar
getActivity().startActivityForResult(i, 1);
constartActivityForResult(i, 1);
fuente
onActivityresult()
deFirstAcivity.Java
obtiene la llamada yonActivityresult()
deFragmentA.Java
nunca me llamaron. Por favor ayuda.startActivityForResult
lugar degetActivity().start...
? Porque hasta donde puedo ver, está anulando la definición deonActivityResult
con 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íaonActivityResult
al 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