如何在布局中为另一个片段使用片段xml标记?

时间:2015-04-08 11:35:42

标签: android android-fragments android-viewpager android-listfragment

我正在尝试做一个包含活动中列表片段的三页。所有页面都是片段(来自v4支持库)但我需要列表片段。当我尝试我遇到了一个问题(https://stackoverflow.com/questions/29473626/viewpager-gives-error-if-i-turn-page)然后我做了一些研究,并了解到片段中不能有片段(我的意思是xml片段标签不添加动态嵌套片段)。但是,例如,在whatsapp的最后一次android更新中,一个活动中有三个页面,其中一个有列表片段(聊天列表),所以我想知道whatsapp是如何做到的?感谢。

我的xml布局,其中包含列表片段:

<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/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="17dp"
    android:text="Welcome to newsfeed" />

<Button
    android:id="@+id/nfButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="52dp"
    android:text="@string/signout" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:orientation="vertical" >
        <android.support.v4.widget.SwipeRefreshLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/swipe_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <fragment
            android:id="@+id/nfListFragment"
            android:name="com.comp.buzz.newsfeed.NFQuestionFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            tools:layout="@layout/item_question" />
        </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

主片段的onCreativeView方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.activity_newsfeed, container, false);
        Fragment fragment = new ListFragment();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.swipe_container, fragment).commit();
    return view;
}

1 个答案:

答案 0 :(得分:0)

您可以使用一些限制(根据doc)嵌套片段:

  • Android 4.2或更高版本
  • 您只能以编程方式嵌套

更新1 这样的事情应该可以胜任:

Fragment fragment = new YourFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.swipe_container, fragment).commit();