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