Android片段重叠

Posted

技术标签:

【中文标题】Android片段重叠【英文标题】:Android fragments overlap 【发布时间】:2014-03-05 12:04:54 【问题描述】:

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

我的活动布局是:

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

<fragment
    android:id="@+id/listFragment"
    android:layout_
    android:layout_
    android:layout_weight="1"
    class="com.fragments.FragmentOrderList" >
</fragment>

<fragment
    android:id="@+id/detailFragment"
    android:layout_
    android:layout_
    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_
android:layout_ >


<TextView
    android:id="@+id/tvOrderDetail"
    android:layout_
    android:layout_
    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();

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

【问题讨论】:

【参考方案1】:

而不是在布局中使用xml fragment:

<fragment
    android:id="@+id/detailFragment"
    android:layout_
    android:layout_
    android:layout_weight="2"
    class="com.fragments.FragmentOrderDetails" >

</fragment>

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

【讨论】:

我花了很长时间才弄清楚这一点。你终于给我答案了。

以上是关于Android片段重叠的主要内容,如果未能解决你的问题,请参考以下文章

屏幕旋转后Android片段重叠

显示对话框片段时与状态栏重叠,仅在Android4.4中

片段内容重叠工具栏和底部导航视图

相机与导航抽屉重叠 - Android

Android:工具栏状态栏重叠

Android:MainActivity/Fragment 中的 ListView / GridView 重叠工具栏