FragmentManager替换使叠加

时间:2013-04-18 10:04:21

标签: android android-fragments

我正在使用supportlib v4来实现主细节流程。

问题: “details”片段的新实例覆盖了第一个(xml创建的)而不是替换它。

我的活动布局是:

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

    }

3 个答案:

答案 0 :(得分:7)

  

注意:通过在布局XML文件中定义片段将片段添加到活动布局时,无法在运行时删除片段。如果您计划在用户交互期间将片段交换进出,则必须在活动首次启动时将片段添加到活动中,如下一课所示。

http://developer.android.com/training/basics/fragments/creating.html

上的最后一件事

答案 1 :(得分:0)

检查以下代码是否有效。

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

答案 2 :(得分:0)

这是解决方案 - 只需要将片段更改为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>