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.