我有一些数据ArrayList
。 ArrayList
包括不同类别的对象(cat 1,cat 2,cat 3,...)。我想在GridView
显示我的列表。
我的xml看起来:
<GridView
android:id="@+id/gv_my_grid"
style="@style/fill_wrap"
android:cacheColorHint="@null"
android:layout_margin="10dp"
android:numColumns="3"
android:listSelector="@android:color/transparent"
android:stretchMode="columnWidth"
android:gravity="center"
/>
一切都很棒。
GridView看起来像:
|item 1 (cat 1)| |item 2 (cat 1)| |item 3 (cat 1)|
|item 4 (cat 1)| |item 5 (cat 2)| |item 6 (cat 2)|
|item 7 (cat 3)| |item 8 (cat 3)| |item 9 (cat 3)|
但是现在我想在不同的类别项目之间放置全宽水平分隔线。它必须看起来像:
___________category_1_____________________________
|item 1 (cat 1)| |item 2 (cat 1)| |item 3 (cat 1)|
|item 4 (cat 1)|
___________category_2_____________________________
|item 5 (cat 2)| |item 6 (cat 2)|
___________category_1_____________________________
|item 7 (cat 3)| |item 8 (cat 3)| |item 9 (cat 3)|
这可能吗?导致我找到的所有内容 - 仅ListView
实现。
修改
我被要求为我的适配器添加代码。我认为getView
方法就足够了。
public View getView(int position, View view, ViewGroup viewGroup) {
final Holder holder;
final View cell;
if (null == view) {
cell = this.inflater.inflate(R.layout.gi_my_item, null);
holder = new Holder(cell);
cell.setTag(holder);
} else {
cell = view;
holder = (Holder) cell.getTag();
}
holder.item = this.items.get(position);
holder.textField.setText(holder.item.someText);
return cell;
}
答案 0 :(得分:1)
我发现您可以RecyclerView
使用GridLayoutManager
来完成这些工作。
以下是如何执行此操作的代码。
GridLayoutManager manager = new GridLayoutManager(this, 3);
创建具有三列的网格。
使用setSpanSizeLookup()
方法进行回调以返回每个项目的列范围。
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (elementsAdapter.getItemViewType(position) == VIEW_HEADER) ? 3 : 1;
}
});
当标题类型为时会产生三列。
此外,您必须制作两个RecyclerView.ViewHolder
并使用getItemViewType()
与RecyclerView.Adapter
中的项目视图和标题视图不同。
我为它制作了一些示例代码 https://github.com/j796160836/GridLayoutManagerDemo
参考:
https://medium.com/android-bites/grid-layout-with-header-3f2966181c4d
答案 1 :(得分:0)
要实现此目的,您必须在GridView
中合并ListView
。使用CustomAdapter
即可,ListView
为父级,GridView
为row_item
。