FragmenManager заменяет наложение

Я использую supportlib v4 для достижения потока детализации.

Проблема: Новый экземпляр фрагмента "details" накладывает первый (созданный xml) вместо него.

My Activity layout:

<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>

Метод вызывается после нажатия:

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();

    }

Ответ 1

Примечание.. Когда вы добавляете фрагмент в макет действия, определяя фрагмент в XML файле макета, вы не можете удалить фрагмент во время выполнения. Если вы планируете вводить и удалять фрагменты во время взаимодействия с пользователем, вы должны добавить фрагмент к активности при первом запуске, как показано на следующем уроке.

Что самое последнее в http://developer.android.com/training/basics/fragments/creating.html

Ответ 2

Проверьте следующий код, который будет работать.

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

Ответ 3

Вот решение - просто нужно сменить фрагмент на FrameLayout, не загружая его при создании активности:

<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>