我正在使用线性布局内部的gridview创建ListView自定义适配器,以显示用户个人资料。
我的XML设计视图正确显示了它们。但是,当我运行该应用程序时,它会将每个项目显示在彼此下方,而不是分布在2列上。 对我在做什么错有任何想法吗?
<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
答案 0 :(得分:1)
首先,您不应该使用GridView,而是使用 RecyclerView ,因为它已取代了旧的 ListView 和 GridView 的功能。
要实现所需的功能,您需要创建一个跨度计数为2的 GridLayoutManager 。
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);
答案 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);
答案 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>