在linearlayout内部具有gridview的Listview适配器,在彼此下方而不是在两列中显示项目

时间:2018-10-06 14:55:21

标签: android gridview android-linearlayout

我正在使用线性布局内部的gridview创建ListView自定义适配器,以显示用户个人资料。

我的XML设计视图正确显示了它们。但是,当我运行该应用程序时,它会将每个项目显示在彼此下方,而不是分布在2列上。 对我在做什么错有任何想法吗?

Example

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <GridView
        android:id="@+id/grid_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="2"
        android:stretchMode="columnWidth"
        android:gravity="center" />

    <ImageView
        android:id="@+id/rimage"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_margin="10dp"
        android:contentDescription="@string/todo"
        app:srcCompat="@drawable/thumb_default_icon_female" />

    <TextView
        android:id="@+id/rnick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:text="@string/nick" />

    <TextView
        android:id="@+id/rcity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:text="@string/city" />
</LinearLayout>

显示 List Items

4 个答案:

答案 0 :(得分:1)

首先,您不应该使用GridView,而是使用 RecyclerView ,因为它已取代了旧的 ListView GridView 的功能。

要实现所需的功能,您需要创建一个跨度计数为2的 GridLayoutManager

RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);

documentation

答案 1 :(得分:0)

尝试

 gridLayoutManagerVertical =
            new GridLayoutManager(this,
                    2, //The number of Columns in the grid
                    LinearLayoutManager.VERTICAL,
                    false);

答案 2 :(得分:0)

您当前的列表项逻辑如下:

Item 1--> LinearLayout
        -->GridView
        -->ImageView
        -->TextView
        -->TextView

Item 2--> LinearLayout
        -->GridView
        -->ImageView
        -->TextView
        -->TextView

因此,在实际情况下,您的项目是LinearLayouts,它们占据了设备屏幕的整个宽度。

您应该使用GridView而不是ListView作为项目的容器,并且应该实现customAdapter以使用LinearLayout项目:

您的Activity布局中的GridView:

<GridView
    android:id="@+id/grid_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="2"
    android:stretchMode="columnWidth"
    android:gravity="center" />

您的物品的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ImageView
    android:id="@+id/rimage"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_margin="10dp"
    android:contentDescription="@string/todo"
    app:srcCompat="@drawable/thumb_default_icon_female" />

<TextView
    android:id="@+id/rnick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:text="@string/nick" />

<TextView
    android:id="@+id/rcity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:text="@string/city" />

,然后将适配器直接设置为GridView。确保适配器扩展了BaseAdapter(不是ListAdapter);

yourGridView.setAdapter(yourCustomAdapter);

总而言之,更好的方法是将RecyclerView与GridLayoutManager一起使用。

recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
            recyclerView.setHasFixedSize(true);
            recyclerView.setAdapter(adapter);

Here is a simple tutorial

答案 3 :(得分:0)

使用嵌套的LinearLayout而不是gridLayout,我也认为您忘记将视图放在gridLayout内,因为它们在gridLayout和LinearLayout的子元素之外,这就是为什么它们在另一个之下显示。试试下面的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent">



<ImageView
    android:id="@+id/rimage"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_margin="10dp"
    android:contentDescription="@string/todo"
    app:srcCompat="@drawable/thumb_default_icon_female" />
<LinearLayout
    android:id="@+id/grid_view"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >
<TextView
    android:id="@+id/rnick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:text="@string/nick" />

<TextView
    android:id="@+id/rcity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:text="@string/city" />
 </LinearLayout>
</LinearLayout>