只显示第一个片段

时间:2012-10-07 09:16:18

标签: android android-fragments

我正在尝试使用2 Fragment

创建一个活动
  • 第一个片段显示使用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"

现在我有两个问题:

  1. 如何展示我的2个片段?
  2. 如何设置第一个片段的宽度(以编程方式?),第二个片段填充剩余宽度?
  3. 感谢您的帮助!

    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>
    

    GalleryFragment:

    <?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);
    }
    

    这会修复第一个片段的宽度,但第二个片段仍未显示...

1 个答案:

答案 0 :(得分:1)

  

如何显示我的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));

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