2011-11-27 6 views
14

Sto riscontrando problemi nel trovare un esempio funzionante di utilizzo di frammenti + RoboGuice. Il problema si verifica quando si tenta di aggiungere/rimuovere frammenti con il gestore transazioni frammento Android. Una volta che il frammento viene ereditato da RoboFragment, il gestore delle transazioni non pensa più che la classe sia un frammento (perché estende RoboFragment). Tuttavia, è possibile utilizzare il gestore frammenti di RoboGuice, ma si blocca anche. Esistono esempi di aggiunta/rimozione di frammenti RoboGuice in modo dinamico?Qualsiasi semplice esempio che utilizza la roboguice con i frammenti in Android?

+0

Ho RoboGuice e Frammenti che funzionano in un'app in modo piacevole. Puoi fornire la traccia dello stack in modo che possiamo vedere qual è il problema? –

+0

Inoltre, quale versione della libreria di compatibilità stai usando? –

+0

Anche questo funziona. –

risposta

13

Recentemente ho iniziato ad usare i frammenti su un nuovo progetto, e il seguente è il codice che sto utilizzando

Non sto ereditando dalla classe RoboFragment, ma sto facendo esattamente lo stesso aggiungendo le seguenti linee ai miei metodi onCreate e onViewCreated. Ereditare da RoboFragment non dovrebbe comportarsi in modo diverso, infatti questo è l'aspetto di RoboFragment.

public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    RoboGuice.getInjector(getActivity()).injectMembersWithoutViews(this); 
} 

public void onViewCreated(final View view, final Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    RoboGuice.getInjector(getActivity()).injectViewMembers(this); 
    // Do whatever with your injected views. 
} 

Ovviamente ho anche implementato onCreateView.

Quindi, nella mia attività, estro FragmentActivity mentre sto utilizzando il compatibility package. Nota, devi usare FragmentActivity se vuoi compatibilità con il livello API pre 11. Se stai solo supportando 11 plus non hai bisogno della lib di compatibilità o di usare FragementActivity. Nella mia attività sto quindi usando il seguente per aggiungere il frammento alla mia pagina.

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.add(R.id.fragmentHolder, new MyFragment()); 
transaction.commit(); 

Il tipo di R.id.fragmentHolder è un FrameLayout.

Tutto funziona correttamente e sono in grado di utilizzare tutte le mie risorse e visualizzazioni iniettate nel mio frammento. Per completezza sto usando l'ultimo 2.0-SNAPSHOT di roboguice con la versione r6 della libreria compatibity-v4 contro Android 2.2.1.

+0

Grazie King. Hai qualche codice che hai trovato o puoi mettere a disposizione frammenti che effettivamente fanno cose significative? – danb

+1

Temo di no, tuttavia dovresti essere in grado di fare qualsiasi cosa tu possa fare con un'attività in un frammento. L'unica parte diversa è il passaggio di dati da un frammento a un altro in quanto non dovrebbero comunicare direttamente. Il modo in cui ho visto questo approccio è controllare il tipo di getActivity() in onCreate() e accertarsi che la sua interfaccia sia stata creata per accettare i dati dal frammento. In questo modo la tua attività può implementare questa interfaccia e passare i dati se necessario al prossimo frammento. – Kingamajick

+0

Sei sicuro che funzioni? Quando provo con Roboguice 2.0 ottengo 'IllegalArgumentException: MyFragmentActivity non sembra essere un contesto RoboGuice (instanceof RoboContext)' –

Problemi correlati