4

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

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

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

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

通常它是 ListView 的单行,但它应该有自己的孩子和自己的层次结构。这一行永远不会被重用,因为它真的很独特。如果我们使用自定义回收器,所有卡片(如上述 ascii 艺术的“#”、“=”或“+”)都应进入特定尺寸的回收站(如 4x2 用于“#”,1x4 用于'=' ) 和回收的机会会高得多。

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

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

4

1 回答 1

0

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"/>
于 2015-07-26T07:12:15.713 回答