2014-02-07 92 views
0

我有两个片段的活动,一个显示列表,一个显示点击项目的细节。当启动应用程序时,细节部分是静态的,一旦我点击一个应该被替换的项目。问题是旧的片段没有被替换,所以两个视图都是彼此重叠的。Android片段重叠

我的活动布局是:

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

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

回答

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替换此容器的内容。

+0

它花了我永远的解决这个问题。最后你给我答案。 – BlackHatSamurai