2011-11-27 14 views
14

Tengo problemas para encontrar un ejemplo práctico de uso de fragmentos + RoboGuice. El problema ocurre cuando intentas agregar/eliminar fragmentos con el administrador de transacciones del fragmento de Android. Una vez que le dice al fragmento que herede de RoboFragment, el administrador de transacciones ya no piensa que la clase es un fragmento (porque extiende RoboFragment). Sin embargo, puede usar el propio administrador de fragmentos de RoboGuice, pero también se bloquea. ¿Hay algún ejemplo de agregar/eliminar fragmentos de RoboGuice dinámicamente?¿Algún ejemplo simple usando roboguice con fragmentos en Android?

+0

Tengo RoboGuice y Fragments trabajando en una aplicación muy bien. ¿Puedes proporcionar el seguimiento de la pila para que podamos ver cuál es el problema? –

+0

Además, ¿qué versión de la biblioteca de compatibilidad está usando? –

+0

También funcioné. –

Respuesta

13

he recientemente comenzó a utilizar fragmentos en un nuevo proyecto, y el siguiente es el código que estoy usando

No estoy heredando de la clase RoboFragment, pero estoy haciendo exactamente lo mismo agregando las siguientes líneas a mis métodos onCreate y onViewCreated. Heredar de RoboFragment no debe comportarse de manera diferente, de hecho, así es como se ve 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. 
} 

Obviamente también he implementado enCreateView.

Luego, en mi Actividad Extiendo FragmentActivity como estoy usando el compatibility package. Tenga en cuenta que debe usar FragmentActivity si desea compatibilidad con el nivel pre API 11. Si solo admite 11 plus, no necesita la compatibilidad lib ni usa FragementActivity. En mi actividad, estoy usando lo siguiente para agregar el fragmento a mi página.

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

El tipo de R.id.fragmentHolder es un FrameLayout.

Todo funciona bien con esto y puedo usar todos mis recursos y vistas inyectados en mi fragmento. Para estar completo, estoy usando el último 2.0-SNAPSHOT de roboguice con la versión r6 de la biblioteca compatibity-v4 contra Android 2.2.1.

+0

Gracias Rey. ¿Tiene algún código que haya encontrado o puede poner a disposición fragmentos que realmente hagan cosas significativas? – danb

+1

Me temo que no, sin embargo, deberías poder hacer cualquier cosa que puedas hacer con una Actividad en un Fragmento. La única parte diferente es pasar datos de un Fragmento a otro ya que no deberían comunicarse directamente. La forma en que he visto este enfoque es comprobar el tipo de getActivity() en onCreate() y asegurarse de que sea de alguna interfaz que haya creado para aceptar datos del fragmento. De esta forma, su actividad puede implementar esta interfaz y pasar los datos si es necesario al siguiente fragmento. – Kingamajick

+0

¿Estás seguro de que esto funciona? Cuando lo intento con Roboguice 2.0 obtengo 'IllegalArgumentException: MyFragmentActivity no parece ser un contexto de RoboGuice (instancia de RoboContext)' –