android - 带有 colSpan 和 rowSpan 的 GridView [Android]

标签 android listview gridview android-listview

我的问题是关于制作一个支持 rowSpan 和 colSpan 的 GridView。我在堆栈溢出等方面寻找它。有一些类似的问题,但没有有效的答案。

实现此目的的一种方法是实现具有不同行类型的自定义 ListView 适配器。使用 getItemViewType(int position) 可以帮助针对这种情况进行优化,但恐怕会有太多的 ViewType 会使回收效率低下。因为我想要一个 3 列的网格和一些 rowSpans 高达 4 或 5 的元素。

另一种方法可以扩展 ListView 并使这些“卡片”拥有自己的回收器。我的意思是,如果有这样一行:

    ##..//
    ##**//
    ##====
    ##++--  

通常它对于 ListView 来说是单行,但它应该有自己的 child 和自己的层次结构。该行将永远不会被重复使用,因为它确实是独一无二的。如果我们使用自定义回收器,则所有卡片(如上面的 ascii 艺术的“#”、“=”或“+”)都应进入特定于其大小的回收站(如“#”为 4x2,“#”为 1x4 '=' ) 并且回收的机会会更高。

也许不使用 ListView 并在 Scroller 的帮助下实现一个全新的 View ,使用它自己的回收器和服务器端确定的每个元素的绝对位置,可能是一个更好的主意。

我问你这个问题,因为我认为你可能会想出一个更好的主意,或者至少给我一些建议,说明每种方法的实现难度。

最佳答案

Java 代码

private LinearLayout addNewSpannedView(Integer resourceId, ViewGroup rootElement) {
    return (LinearLayout) ((ViewGroup) getLayoutInflater().inflate(resourceId, rootElement, true)).getChildAt(rootElement.getChildCount() - 1);
}
// set columnSpan depending on some logic (gridLayout is the layout to add the view's to -> in my case these are LinearLayouts)
shape = addNewSpannedView(columnSpan == 1 ? R.layout.grid_ll_col_span_1 : R.layout.grid_ll_col_span_2, gridLayout);

grid_ll_col_span_2.xml

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

关于android - 带有 colSpan 和 rowSpan 的 GridView [Android],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944984/

相关文章:

android - 获取特定文件夹的 MediaStore 路径

java - 使 Canvas 的画线可点击

android - 我的广播接收器没有启动

c# - 用鼠标单击时如何获取 ListView (GridView) 单元格的内容

wpf - ListView 的 ItemsPanelTemplate 显然错误地抛出异常

android - 在 ListView 中禁用和启用 edittext

android - 数据集更改后如何默认防止 gridview 滚动

android - 我可以在 Activity 和服务之间共享 ViewModel 吗?

android - 从我的应用程序在 whatsapp 上分享视频

c# - 我的 ListView 不会输出,是否需要回发?