2013-09-22 103 views
4

我的問題是關於使用rowSpan和colSpan支持的GridView。我在堆棧溢出等找它。有幾個類似的問題,但沒有有效的答案。GridView與colSpan和rowSpan [Android]

這樣做的一種方式可能是實現具有不同行類型的自定義ListView適配器。使用getItemViewType(int position)可以幫助優化這種情況,但恐怕會有這麼多的ViewType會導致回收效率低下。因爲我想有一個三色網格和rowSpans高達4或5的一些元素。

另一種方式可以擴展ListView並使這些「卡」具有自己的回收站。我的意思是,如果有一排這樣的:

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

通常這將是ListView中單列,但它應該有自己的孩子的和自己的層次。這行不會被重複使用,因爲它真的是獨一無二的。如果我們使用自定義的回收站,所有的卡片(如上面的ascii藝術的'#','='或'+')應該回到特定於其尺寸的回收站(比如4x2代表'#',1x4代表'='),回收的機會將會更高。

在Scroller的幫助下,可能不使用ListView並使用自己的回收器和在服務器端確定的每個元素的絕對位置來實現全新視圖,這可能是一個更好的主意。

我在問你這個問題,因爲我認爲你可能會想出一個更好的主意,或者至少給我一些建議,說明如何實現每種方式。

回答

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"/>