with studio onfragmentinteractionlistener must implement fragments con comunicar activity java android android-fragments android-activity android-fragmentmanager

java - studio - ¿Cómo manejar múltiples oyentes de interacción de fragmentos en una actividad correctamente?



comunicar activity con fragment (2)

Tengo una Activity y seis Fragments diferentes unidos a ella. Cada fragmento tiene la interfaz y actividad OnFragmentInteractionListener implementa todos estos oyentes para recibir devoluciones de llamada. Se ve un poco desordenado, por lo que estoy interesado ¿hay algunos patrones / formas de simplificar esto y hacerlo más elegante?


Mi intento de mejorar la respuesta de neonamu :

Puede definir una interfaz como la especificada anteriormente, pero una genérica

public interface OnListFragmentInteractionListener<T> { void onListFragmentInteraction(String tag, T data); }

Luego, en la actividad del host puede implementarlo específicamente para el tipo que desee, o como se sugiere arriba para Objeto:

public class MyFragActivity implements OnListFragmentInteractionListener<Object> { ... @Override public void onListFragmentInteraction(String tag, Object data) { //do some stuff with the data } }

De esta forma, cuando implemente la interfaz según las necesidades de su aplicación, tal vez pueda reutilizar esta interfaz en otra situación.


Una buena solución podría ser usar SAME OnFragmentInteractionListener para todos los fragmentos, y usar un parámetro de cada método de escucha (como un parámetro TAG) para identificar qué fragmento envió la acción.

Aquí un ejemplo:

Haz una nueva clase y cada fragmento usa esta clase

OnFragmentInteractionListener.java

public interface OnFragmentInteractionListener { public void onFragmentMessage(String TAG, Object data); }

En tu actividad:

public void onFragmentMessage(String TAG, Object data){ if (TAG.equals("TAGFragment1")){ //Do something with ''data'' that comes from fragment1 } else if (TAG.equals("TAGFragment2")){ //Do something with ''data'' that comes from fragment2 } ... }

Puede usar el tipo de Objeto para pasar cada tipo de datos que desee (luego, en cada if, debe convertir Objeto a tipo que fueron necesarios).

Usando esta forma, el mantenimiento es más fácil que tener 6 oyentes diferentes y un método para cada tipo de datos que desea pasar.

Espero que esto ayude.