Cómo llamar métodos de un fragment, desde un menú en la Activity
Este artículo está centrado en explicar cómo llamar un método desde un menú superior, creado en un activity o, desde cualquier lugar de la app, aun cuando el fragment que contiene el método en cuestión está activado. Esto, aunque puede sonar no muy claro en un principio, si puede haber casos en los que se necesite, que un método, contenido en un fragment, sea accesible para cualquier ventana de la aplicación.
Cómo llamar el método de un fragment desde el menú de la app
Normalmente el menú se crea en la MainActivity y tiene su método para crear una acción para cada uno de los ítems que lo componen, una de esas acciones es la que va a llamar nuestro método del fragment, para lo que hará falta hacer uso de las transiciones en el FragmentContainerView. Dicho código queda de la siguiente manera, usando como ejemplo el HomeFragment:
// Se instancia el HomeFragment
HomeFragment homeFragment = new HomeFragment();
// LLamar al FragmentManager e iniciar la transacción
getSupportFragmentManager().beginTransaction()
.replace(R.id.myFragmentContainerView, homeFragment)
// En lugar de commit(), se usa commitNow()
.commitNow();
//Llama al método después de cargar el fragmento
homeFragment.MetodoALlamar()
Llamar el método del Fragment con botones, desde cualquier lugar de la App
Si lo que se quiere es crear un método que se pueda llamar a través de botones, desde cualquier ubicación de la app, lo que se debe hacer el meter el código anterior dentro de un método en la actividad principal y luego instanciar la actividad donde se quiera usar. Algo como lo siguiente:
private void abrirMetodo (){
MainActivity mainActivity = (MainActivity)getActivity();
assert mainActivity != null;
mainActivity.metodoDeOtroFragment();
}
Ya este método se puede crear en cualquier fragment y llamarlo con el clic de un botón o, como queramos, según sea la necesidad que se tenga en la aplicación para Android. Lo importante aquí, es que es posible crear un método de uso para toda la App, que tenga su función principal dentro de un fragment.
A mí, en lo personal, esta necesidad me nació, porque necesitaba recuperar una lista en el HomeFragment, la cual era manejada por una clase. Dentro de mi fragmento tenía todo para recuperar esa lista, pero, no quería poner un botón más en mi HomeFragment y, quería que dicha función fuera llamada desde el menú superior de mi app.