Ho uno Activity
e sei diversi Fragments
collegati ad esso. Ogni frammento ha l'interfaccia OnFragmentInteractionListener
e l'attività implementa tutti questi listener per ricevere i callback. Sembra un po 'disordinato, quindi sono interessato ci sono alcuni schemi/modi per semplificare questo e rendere più elegante?Come gestire più listener di interazioni frammento in un'attività in modo corretto?
risposta
Una buona soluzione potrebbe essere utilizzare SAME OnFragmentInteractionListener per tutti i frammenti e utilizzare un parametro di ciascun metodo listener (come un parametro TAG) per identificare quale frammento ha inviato l'azione.
Ecco un esempio:
Fai una nuova classe e ogni frammento utilizzare questa classe
OnFragmentInteractionListener.java
public interface OnFragmentInteractionListener {
public void onFragmentMessage(String TAG, Object data);
}
Nella vostra attività:
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
}
...
}
È possibile utilizzare Tipo di oggetto per passare ogni tipo di dati che si desidera (quindi, in mai y se, è necessario convertire l'oggetto in testo necessario).
In questo modo, la manutenzione è più semplice rispetto a 6 diversi ascoltatori e un metodo per ogni tipo di dati che si desidera trasmettere.
Spero che questo aiuti.
Il mio tentativo di migliorare neonamu's answer:
È possibile definire un'interfaccia come sopra specificato, ma un generico uno
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
Poi nell'attività di accoglienza è possibile implementare in modo specifico per il tipo desiderato, o come suggerito sopra per oggetto:
public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
...
@Override
public void onListFragmentInteraction(String tag, Object data) {
//do some stuff with the data
}
}
in questo modo quando si implementa l'interfaccia a seconda delle esigenze della propria applicazione, forse puoi riutilizzare questa interfaccia in un'altra situazione.
Funziona come un fascino. Molte grazie! –
Mi chiedevo perché usi @Override e l'utente Neonamu no. Entrambi funzionano? – Burkely91
@ Burkely91 sì funzionerà senza di esso.BUT Dovresti usarlo. l'annotazione di override in Java è intesa come verifica/verifica che stai facendo l'override che pensi di essere (segnalerà un errore se per esempio dimentichi un parametro) senza l'Override, semplicemente definiresti un nuovo metodo con lo stesso nome diversi parametri (facendo un sovraccarico) e non implementando l'interfaccia – HenriqueMS