使用colSpan和rowSpan的GridView [Android]

时间:2013-09-22 14:40:46

标签: android listview gridview android-listview

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

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

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

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

通常它对于ListView来说只是一行,但它应该有自己的子级和自己的层次结构。这行永远不会被重用,因为它真的很独特。如果我们使用自定义回收器,所有卡(如上面的ascii艺术的“#”,“=”或“+”)应该转到特定于其尺寸的回收箱(例如4x2用于'#',1x4用于'=')并且回收的可能性要高得多。

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

我问你这个问题,因为我认为你可能会提出一个更好的想法,或者至少给我一些关于如何实现各方面的建议。

1 个答案:

答案 0 :(得分: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"/>