0

我有一个包含两个片段的活动,一个显示列表,一个显示单击项目的详细信息。启动应用程序时,详细信息部分是静态的,一旦我单击一个项目,它就会被替换。问题是旧片段没有被替换,所以两个视图都在彼此之上。

我的活动布局是:

<?xml version="1.0" encoding="utf-8"?>

<fragment
    android:id="@+id/listFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    class="com.fragments.FragmentOrderList" >
</fragment>

<fragment
    android:id="@+id/detailFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="2"
    class="com.fragments.FragmentOrderDetails" >

</fragment>

细节片段的布局是:

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


<TextView
    android:id="@+id/tvOrderDetail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="test view of details fragment" >
</TextView>

在上面的布局中,我们也看到了最初看到的静态文本。我活动中替换片段的代码是这样的

        FragmentTransaction transaction = getFragmentManager().beginTransaction();
    FragmentOrderDetails newFragment = new FragmentOrderDetails();
    newFragment.setArguments(b);
    transaction.replace(R.id.detailFragment, newFragment);

    transaction.addToBackStack(null);
    transaction.commit();

对我来说,它看起来不是“替换”而是“添加”。我是否必须始终删除旧片段?还是我必须在这里采用不同的方法?在我看来,只有原始片段保留在那里,并且在第二个,第三个,......替换前一个片段被正确替换,只有静态片段始终保留在那里。

4

1 回答 1

3

而不是在布局中使用xml fragment

<fragment
    android:id="@+id/detailFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="2"
    class="com.fragments.FragmentOrderDetails" >

</fragment>

使用一些容器,例如LinearLayoutFrameLayout带有一些 containerId。然后以编程方式首先使用 containerId 将片段添加到该容器,然后将该容器的内容也替换为 containerId。

于 2014-02-07T22:04:32.857 回答