3

我正在尝试使用 2 个片段创建一个活动

  • 第一个片段显示使用 LisFragment 的画廊列表
  • 第二个片段显示在第一个片段中选择的画廊的预览图像

当我在视图中声明片段时,它可以工作。但现在我想动态管理片段:

GalleriesFragment gfs = new GalleriesFragment();
GalleryFragment gf = new GalleryFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.layout_m,gfs);
ft.add(R.id.layout_m,gf);
ft.commit();

我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" 
    android:id="@+id/layout_m">
</LinearLayout>

这样做时,只显示添加的第一个片段,我尝试在添加片段时颠倒它们的顺序......

当我在布局时,我可以设置我的片段宽度:

android:layout_width="400dp"

现在我有 2 个问题:

  1. 如何让我的 2 个片段显示?
  2. 如何设置第一个片段和第二个片段的宽度(以编程方式?)以填充剩余宽度?

谢谢你的帮助!

PS:

GalleriesFragment没有布局,也没有覆盖onCreateView,但ArrayAdapter对于每一行都有一个这样的返回视图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/idimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10sp"
        android:layout_marginLeft="10sp"
        android:layout_marginTop="10sp"
        android:contentDescription="preview"
         >
    </ImageView>

    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/texttitre"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5sp"
            android:layout_marginRight="7sp"
            android:layout_marginTop="10sp"
            android:background="@layout/roundcorner"
            android:gravity="center"
            android:text="Title here" >
        </TextView>

        <TextView
            android:id="@+id/itemdescription"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10sp"
            android:layout_marginRight="10sp"
            android:text="description" >
        </TextView>

    </LinearLayout>

</LinearLayout>

图库片段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Gallery
        android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

更新 2:

onCreateView我在GalleriesFragment课堂上添加了一个:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        FrameLayout.LayoutParams lparams =  new FrameLayout.LayoutParams(400, LayoutParams.MATCH_PARENT);
        container.setLayoutParams(lparams);
        return super.onCreateView(inflater, container, savedInstanceState);
}

这修复了第一个片段的宽度,但第二个片段仍然没有显示......

4

1 回答 1

2

如何让我的 2 个片段显示?

您当前的方法将使提供给该add方法的第一个片段占用容器布局的所有空间。一种解决方案是使用为添加的两个片段中的每一个保留空间的布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_m"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <FrameLayout
        android:id="@+id/frame1"
        android:layout_width="100dp"
        android:layout_height="match_parent" />

    <FrameLayout
        android:id="@+id/frame2"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

然后在代码中:

ft.add(R.id.frame1, gfs);
ft.add(R.id.frame2, gf);
ft.commit();

如何设置第一个片段和第二个片段的宽度(以编程方式?)以填充剩余宽度?

片段不仅仅是普通视图,一种方法是使用您的单个LinearLayout布局文件并将LayoutParams片段视图的设置为onActivityCreated

getView().setLayoutParams(new LinearLayout.LayoutParams(100, LinearLayout.LayoutParams.WRAP_CONTENT));

当然,这会使您的片段绑定到父容器,我也不知道这在整个片段系统中的效果如何。

于 2012-10-07T10:29:28.793 回答