2011-10-17 9 views
5

Estoy buscando algunos consejos sobre la mejor manera de manejar fragmentos que ejecutan otros fragmentos.Cómo cargar un nuevo fragmento en el mismo espacio que el fragmento actual

Estoy convirtiendo una aplicación que comencé a escribir con un enfoque más basado en la actividad y desde entonces he comenzado a usar Fragmentos. Tengo algunos Fragmentos que solían lanzar una nueva Actividad y quiero pasarlos a lanzar otros Fragmentos en la misma vista en la que reside el Fragmento actual.

Por ejemplo, tengo una actividad que tiene un WebView que usa un WebViewClient para manejar interacciones js-> java internas. Mi WebViewClient puede poner en marcha otras actividades, que solía ver con:

i = new Intent(context, GoogleMapActivity.class); 
startActivity(i); 

Esta actividad vistaweb puede ser o bien a pantalla completa o en una vista con un menú en el lado, pero yo quiero la vista web para respetar la disposición - por lo si el menú está presente, debe estar presente cuando se lanzan nuevos Fragmentos: simplemente no sé cuál es el mejor enfoque para escribir el código que lanza los Fragmentos.

Entonces ... ¿hay alguna manera, dentro de un Fragmento, de decir esencialmente un nuevo Fragmento para cargar en el mismo espacio que el Fragmento actual o es necesario que haya alguna interacción con la Actividad?

** ** EDITAR

Teniendo en cuenta que hay algunos diseños diferentes que podrían ser utilizados, no siempre se sabe qué ID al que debería apuntar a poner el fragmento de - por lo tanto necesito saber si hay una manera de hacer esto sin conocer la identificación (como en el método replace por ejemplo).

+0

vistazo a esta pregunta. http://stackoverflow.com/questions/7790945/how-can-i-use-fragmentmanager-to-display-fragment-abc-in-a-framelayout/7791116#7791116 –

Respuesta

5
getFragmentManager().beginTransaction() 
    .replace(((ViewGroup) getView().getParent()).getId(), fragment) 
    .addToBackStack(null) 
    .commit(); 

Esto debería reemplazar el contenedor primario con el fragmento deseado.

0

Eso debería ser posible a través de FragementManager.replace(). Eche un vistazo al documentation for Fragment y especialmente al ejemplo más largo en la sección "Diseño" allí.

+0

Dado que hay algunos diseños diferentes que podrían ser utilizado, no siempre sé a qué identificación debería apuntarme para poner el fragmento; por lo tanto, necesito saber si hay una manera de hacerlo sin conocer la identificación. O qué enfoque debería usar, es decir, ¿debería nombrar todos los fragmentos con el mismo ID? – Martyn

+1

también puede obtener el fragmento con la etiqueta. después de eso en el reemplazo en lugar de identificación, puede pasar el primer argumento como fragmento. –

-1

Si desea agregar Fragmento bien reemplazarlo, utilice:

getFragmentManager().beginTransaction().add(R.id.fragment_container, new Fragment()).commit(); 
Cuestiones relacionadas