tutorial studio navegar fragments example entre ejemplo dinamicos android android-fragments

example - navegar entre fragments android studio



FragmenManager replace hace overlay (3)

Estoy usando supportlib v4 para llegar al flujo de detalles maestros.

Problema: la nueva instancia del fragmento "detalles" superpone la primera (xml creado) en su lugar, la reemplaza.

El diseño de mi actividad es:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".TrackListActivity" > <fragment android:id="@+id/fragmentList" android:name="pl.com.digita.BikeComputerUi.TrackList.TrackListFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <fragment android:id="@+id/fragmentTrack" android:name="pl.com.digita.BikeComputerUi.TrackList.TrackInfoFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" /> </LinearLayout>

Método llamado después de hacer clic:

private void showDetails(long trackId){ View fragmentContainer = getActivity().findViewById(R.id.fragmentTrack); TrackInfoFragment trackInfoFragment = TrackInfoFragment.newInstance(trackId); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(fragmentContainer.getId(), trackInfoFragment).commit(); }


Aquí hay una solución: solo necesita cambiar el fragmento a FrameLayout sin cargarlo en la creación de la actividad:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".TrackListActivity" > <fragment android:id="@+id/fragmentList" android:name="pl.com.digita.BikeComputerUi.TrackList.TrackListFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/details" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="2" /> </LinearLayout>


Verifique el siguiente código, funcionará.

View fragmentContainer = ClassName.this.findViewById(R.id.fragmentTrack); TrackInfoFragment fragment = new TrackInfoFragment(); getSupportFragmentManager().beginTransaction() .replace(fragmentContainer.getId(), fragment).commit();


Nota: Cuando agrega un fragmento a un diseño de actividad definiendo el fragmento en el archivo XML de diseño, no puede eliminar el fragmento en tiempo de ejecución. Si planea intercambiar y eliminar sus fragmentos durante la interacción del usuario, debe agregar el fragmento a la actividad cuando comience la actividad, como se muestra en la siguiente lección.

Que es lo último en http://developer.android.com/training/basics/fragments/creating.html