我有一个包含两个片段的活动,一个用于显示列表,一个用于显示单击项目的详细信息。启动应用程序时,详细信息部分是静态的,一旦我单击某个项目,它就应该被替换。问题是旧片段没有被替换,所以两个视图都在彼此之上。
我的活动布局是:
<?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();
对我来说,它看起来不是“替换”,而是“添加”。我是否必须始终删除旧片段?或者我必须在这里采用不同的方法吗?在我看来,只有原始片段保留在那里,在第二个、第三个……替换前一个片段时,它被正确替换,只有静态片段始终保留在那里。
而不是在布局中使用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>
使用一些容器,例如LinearLayout
or FrameLayout
与一些containerId。
然后首先使用containerId以编程方式将片段添加到该容器,然后也用containerId替换该容器的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)