4

我正在使用 supportlib v4 来达到主从流程。

问题:“详细信息”片段的新实例覆盖第一个(创建的 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();

    }
4

3 回答 3

7

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

这是http://developer.android.com/training/basics/fragments/creating.html上的最后一件事

于 2013-04-23T06:08:08.243 回答
0

检查以下代码它将起作用。

View fragmentContainer = ClassName.this.findViewById(R.id.fragmentTrack);
 TrackInfoFragment fragment = new TrackInfoFragment();                  
getSupportFragmentManager().beginTransaction()
.replace(fragmentContainer.getId(), fragment).commit();     
于 2013-04-18T10:29:01.643 回答
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>
于 2013-04-18T10:46:28.647 回答