如何添加内联ListFragment?

时间:2013-09-12 20:32:25

标签: android android-layout

我有如下布局。它包含一些TextView和ImageView。下面我想添加一个ListFragment。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Name: "
        android:id="@+id/textView"
        android:layout_gravity="left|center_vertical" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/name"
        android:layout_toRightOf="@+id/textView"
        android:layout_gravity="left"
        android:text="Large Text" />
...
    <fragment android:id="@+id/list"
        android:layout_below="@id/name"
        class="com.snot.bodyweightworkout.ExerciseListFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

现在我正在使用下面的代码添加我的ListFragment。但我想如上图所示添加它。我猜我会以同样的方式添加它,但我应该在布局中使用哪个元素作为容器?

FragmentManager fm = getSupportFragmentManager();
if (fm.findFragmentById(android.R.id.content) == null) {
    ProgramListFragment list = new ProgramListFragment();
    fm.beginTransaction().add(android.R.id.content, list).commit();
}

有关如何将其添加到内联的任何建议吗?

1 个答案:

答案 0 :(得分:1)

查看文档http://developer.android.com/guide/components/fragments.html

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Name: "
    android:id="@+id/textView"
    android:layout_gravity="left|center_vertical" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/name"
    android:layout_toRightOf="@+id/textView"
    android:layout_gravity="left"
    android:text="Large Text" />

<fragment android:name="com.example.news.ArticleListFragment"
        android:id="@+id/list"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent" />

</RelativeLayout>

然后当你想获得片段时,你所要做的就是

FragmentManager fm = getSupportFragmentManager();
ProgramListFragment plf = (ProgramListFragment)fm.findFragmentById(r.id.myfragment);

你也可以在你的xml中用FrameLayout替换片段,然后替换框架中的视图

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Name: "
    android:id="@+id/textView"
    android:layout_gravity="left|center_vertical" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/name"
    android:layout_toRightOf="@+id/textView"
    android:layout_gravity="left"
    android:text="Large Text" />

<FrameLayout
        android:id="@+id/list"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent" />

</RelativeLayout>

然后你基本上可以做你正在做的事情,除了不要添加你想要的replace

FragmentManager fm = getSupportFragmentManager();
ProgramListFragment list = new ProgramListFragment();
fm.beginTransaction().replace(R.id.list, list).commit();