2012-03-13 2 views
5

Qui è il mio caso d'uso:Come posso riutilizzare un'istanza di frammento Android su diversi frammenti?

Ho bisogno di creare 3 schede che utilizzano ActionBar Navigation Tabs, e sto usando ActionBarSherlock per raggiungere questo obiettivo. Ciascuna delle 3 schede è il suo Fragment. Tuttavia, vi sono alcune informazioni comuni che vengono mostrate in ciascuna scheda (nel mio caso, titolo del prodotto, descrizione). Ho creato un altro frammento per questa informazione comune e sto facendo riferimento a questo frammento in ciascuno dei principali layout di Fragment, come this.

Ecco il mio problema:

voglio riutilizzare l'istanza Frammento che recupera e visualizza le informazioni comuni. Sto usando il codice qui sotto, ma sembra sempre creare una nuova istanza del frammento comune in ciascuno dei frammenti principali.

FragmentManager fm = getFragmentManager(); 
    f = (ProductDetailsInfoFragment) fm.findFragmentByTag("prodinfo"); 

    if (f == null) { 
     Log.d(TAG, "fragment not found...creating new instance"); 

     f = new ProductDetailsInfoFragment(); 
     f.setTargetFragment(this, 0); 
     fm.beginTransaction().replace(R.id.prod_info_fragment, f, "prodinfo").commit();   
    } 
+0

impossibile riutilizzare la stessa istanza di un frammento, è necessario crearne uno nuovo da utilizzare su un altro frammento. –

+0

Ugh, questo è quello di cui avevo paura. Suppongo che dovrò aggiungere qualche logica nel frammento per la memorizzazione nella cache in modo da non recuperare più volte i dati. – Sanjeev

risposta

2

È possibile condividere i frammenti se si desidera. Dovrai implementare ActionBar.TabListener e nel tuo onTabSelected scegli quale frammento vuoi utilizzare.

Si potrebbe fare qualcosa di simile: https://gist.github.com/anonymous/5415274

Un'opzione meglio è quello di memorizzare i dati che è necessario per entrambi questi frammenti in un oggetto separato che è possibile condividere tra di loro. Questo ti permetterà di testare il recupero senza avere una UI ad essa collegata, se lo desideri. Ciò consente anche ai due frammenti di divergere in base alle loro necessità, rendendoli una cosa a scopo singolo rispetto a dover mantenere tutto il codice necessario per entrambe le azioni in un singolo frammento.