前言
記錄一下之前寫的一個多列布局,經常用於篩選條件中,比如這樣:
這是一個4列數據和1列數據交錯下的多列布局。之前我們寫的時候用ScrollView包裹兩個TextView作為Title,又包裹兩個GridView作為4列數據,同時還要處理ScrollView和GridView的沖突(雖然很簡單)。
現在可以直接使用RecyclerView一個布局來實現。接下來先介紹如何實現,再對比和之前實現方式優劣,即實用性。
使用RecyclerView實現
主要依靠GridLayoutMananger和它的一個方法setSpanSizeLookup來實現。
/*
傳入所有列數的最小公倍數,1和4的最小公倍數為4,即意味着每一列將被分為4格
*/
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getContext(), 4);
//設置表格,根據position計算在該position處1列占幾格數據
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override public int getSpanSize(int position) {
//計算在哪個position時要顯示1列數據,即columnCount / 1列 = 4格,即1列數據占滿4格
if (position == 0 || position == mTopGridData.size() + 1) {
return 4;
}
//return 2即為columnCount / 2 = 2列,一格數據占2列,該行顯示2列
//1格1列,即改行有columnCount / 1 = 4列,該行顯示4列
return 1;
}
});
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(new DoubleGridAdapter(getContext(), mTopGridData, mBottomGridList, this));//設置數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
這就是使用RecyclerView實現多列布局的方式,接下來說說兩種方式的優劣。
兩種方式優劣
使用RecyclerView
好處是僅用一個布局,減少了布局層次嵌套,有時候甚至可以把 完成 按鈕也當做一列數據。
但是這種方式乍一看很簡單,其復雜性體現在對數據的處理上和UI變化上。篩選器中必須要把當前選中的Holder回調出來,保存其數據並更新其UI。尤其在有全部選項時或者多選時。當列越多思路必須要越清晰。
這種實現也會隨着需求越變越復雜而增加維護難度。
使用ScrollView和GridView嵌套
缺點是構建表格時比較繁瑣(不停的累加GridView)和設置Adapter時代碼較多。
但有點很多。
1.因為拆開寫所以很清晰,大多數邏輯相同僅數據不一樣,不會出大錯。
2.可以直接使用AbsListView的setChoiceMode方法,使用CheckedTextView時會自動更新UI,而且可以通過getCheckedItemPosition直接獲取點選數據,更為方便。
這兩種實現都寫在DropDownMenu中的doubleGrid,你可以看到這兩種實現的區別。
結語:
當列比較簡單時,使用RecyclerView實現比較輕便;但比較復雜的表格時RecyclerView對比較難以數據,但不妨一試。自己在實際項目開發中有一個3、4列數據的,同時還有全部選項、並可以多選,還要有反選功能(點擊該表格的全部后其他數據置灰),寫的欲罷不能。所以在這總結一下,不過回過頭來看,還是覺得使用RecyclerView實現要好一點,很有趣,還不錯,可以試試。
---------------------
作者:baiiu
來源:CSDN
原文:https://blog.csdn.net/u014099894/article/details/51724223
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!