6

我有 5 个片段的 viewpager,在其中一个片段中,我想通过单击按钮完全替换它。我还希望能够通过后退按钮隐藏子片段。这是这个片段布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/contacts_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@null">
<LinearLayout
    android:id="@+id/import_contacts"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

<include layout="@layout/listview_filter"/>

<Button
    android:id="@+id/btn_my_clusters"
    android:background="@drawable/btn_wide_arrow_bg"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/TEXT"
    android:text="@string/btn_my_clusters_text"
    android:layout_marginBottom="10dp"/>

<ProgressBar
    android:id="@+id/progress_bar"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="center"/>

<ListView
    android:id="@+id/contacts_list"
    android:divider="@null"
    android:listSelector="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="gone"/>
</LinearLayout>

当我尝试像这样替换时contacts_layout

ImportContactsFragment importContactsFragment = new  ImportContactsFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.contacts_layout, importContactsFragment).commit();

它不起作用(我的意思是没有错误,但我的 ImportContactsFragment 根本没有显示)。但是当我尝试像这样替换import_contacts视图时:

ImportContactsFragment importContactsFragment = new  ImportContactsFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.import_contacts, importContactsFragment).commit();

一切正常,显示 ImportContactsFragment。

所以我想知道是否可以用子片段替换所有片段内容?也许我可以用其他方式做到这一点?

4

1 回答 1

4

replace事务不会从目标布局容器中删除当前视图,因此当您使用第一段代码时,新视图会Fragment添加到 contacts_layoutLinearLayout但不会被视为先前的视图覆盖整个屏幕(高度)。

使用第二段代码LinearLayout,您添加新的代码Fragment是父级的第一个子级,LinearLayout它有空间,所以它是可见的。

对于你正在做的事情,我建议你将初始布局包装在一个Fragment放置在包装器布局中的类中,然后你可以很容易地替换它。

于 2013-04-20T07:51:46.620 回答