Tengo un fragmento en una actividad que estoy usando como cajón de navegación. Contiene botones que, cuando se hace clic en ellos, inician nuevas actividades (startActivity de un fragmento simplemente llama a startActivity en la actividad actual).
Por mi vida, parece que no puedo entender cómo terminaría la actividad actual después de comenzar una nueva.
Estoy buscando lograr algo como esto en el fragmento:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
Pero parece que Fragment.class no implementa finish () (como si implementa startActivity (...)).
Me gustaría que el backstack de la actividad se borre cuando inicien la segunda actividad. (por lo que presionar hacia atrás desde la nueva actividad técnicamente los devolvería al lanzador)
getActivity()
puede sernull
en algunos casos. ¿Qué debemos hacer entonces?finish
.Bueno en realidad...
No permitiría que el Fragmento intente terminar la Actividad. Eso pone demasiada autoridad en el Fragmento en mi opinión. En su lugar, usaría la guía aquí: http://developer.android.com/training/basics/fragments/communicating.html
Haga que el Fragmento defina una interfaz que la Actividad debe implementar. Haga una llamada a la actividad, luego deje que la actividad decida qué hacer con la información. Si la actividad desea terminar sola, puede hacerlo.
fuente
Como lo mencionó Jon F Hancock , así es como un fragmento puede "cerrar" la actividad sugiriendo que la actividad se cierre. Esto hace que el fragmento sea portátil como es el motivo de ellos. Si lo usa en una actividad diferente, es posible que no desee cerrar la actividad.
El siguiente código es un fragmento de una actividad y un fragmento que tiene un botón para guardar y cancelar.
PlayerActivity
PlayerInfoFragment, que contiene una interfaz que la actividad de llamada necesita implementar.
fuente
Cada vez que uso terminar para cerrar el fragmento, se cierra toda la actividad. Según los documentos, los fragmentos deben permanecer mientras permanezca la actividad principal.
En cambio, descubrí que puedo cambiar las vistas de la actividad principal usando esta declaración: setContentView (R.layout.activity_main);
Esto me devuelve a la actividad principal.
Espero que esto ayude a alguien más que pueda estar buscando esto.
fuente
Muy simple...
1- solo toma actividad
getActivity()
en el fragmento2- luego llama
finish();
Así que acaba de
getActivity().finish();
terminar la actividad de los padres.fuente
Debe utilizar el método getActivity () para finalizar la actividad del fragmento.
fuente
En Fragmento use getActivity.finishAffinity ()
También eliminará todo el fragmento que empujó la actividad actual de la pila con la actividad ...
fuente
Prueba esto. No debería haber ninguna advertencia ...
fuente
15 de junio de 2020 - Respuesta actualizada.
Tiene dos opciones para Java y Kotlin. Sin embargo, la lógica de ambas formas es la misma. Debería llamar a la actividad después de llamar al método finish () .
Si su actividad no puede ser nula, use Answer_1 . Sin embargo, si su actividad puede ser nula , use Answer_2 .
@canerkaseler
fuente
si
Fragment.class
no implementafinish()
Cuando trabaje con fragmentos, en lugar de usar esto o hacer referencia al contexto, use siempre
getActivity()
. Deberías llamarfuente