1. 程式人生 > >android兩級分類列表且子列表item不同佈局實現

android兩級分類列表且子列表item不同佈局實現

想必大家開發過程中一定碰到過這樣的介面

上面這個圖, 看到後分析一下,  最上面是一個滾動輪播圖, 肯定滑動的時候是要跟著可以滑動的,這個應該就是一個headview 
下面這部分 ,要求是這樣的    最新視訊分類 下面的視訊 是可以顯示多個的  也就是一個listview效果  其它分類下面的 item 是 類似gridview效果 
 看到這個效果 應該想到的是recycleview和 expandlistview實現下面的佈局 然後 再addheaderview ,完美解決。
我用的是 expandListView實現的 。
說下具體開發流程:

 1.寫 上面的滾動輪播圖介面  單獨一個xml  然後作為headerView

 2.Expandlistview可以實現  分類兩級列表效果 大家都可以做到
 3.寫完後   發現,expandlistView的子佈局 有兩種  一種是listview效果  一種是gridview效果 這種情況 我們就要自己單獨寫一個邏輯處理 了 。第二種佈局  每個item是兩條資料
 最主要是對getChildType和 getChildrenCount 方法進行處理判斷
 處理的原理是 這樣: 判斷需要 第二種佈局的時候   count變為  原來的一半  如果數目不夠 就就是  count的一半 加1 ....
 先說一下 Expandlistview 就是一個普通的ExpandListView 只不過要是想要這樣的效果 需要設定幾步屬性


1.去掉預設箭頭

  mListView.setGroupIndicator(null);// 這個是去掉父級的箭頭



2.設定父級預設全部展開
	for (int i = 0; i < liveList.size(); i++) {
	   mListView.expandGroup(i);
	}


3.設定點選不能收縮

mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(
ExpandableListView parent, View v,
int groupPosition, long id) {
return true;
}
});


再說一下 子類的需要處理的一些問題
@Override
public int getChildType(int groupPosition, int childPosition) {
try {
if (groupPosition == 0 && (mLiveList.get(groupPosition).getId().equals("-1")))
return TYPE_1;
else
return TYPE_2;
} catch (Exception e) {
System.out.println("Exception-->>" + e.toString());
return TYPE_1;
}
}
@Override
public int getChildrenCount(int groupPosition) {
int childSize = mLiveList.get(groupPosition).getVideoList().size();
if(groupPosition==0){
return childSize;//返回的是第一種item佈局的size
}else{
int count = childSize / mColumn;
if (childSize % mColumn > 0) {
count++;
}
return count;//返回的是子項第二種佈局的size
}
}


上面的 mColumn 是 第二種佈局裡面是 每行有多少個item,如上圖  第二種item裡面有兩個子項就是 private int mColumn = 2;

還有特別需要注意的一點是 

	@Override
	public int getChildTypeCount() {
		return 3;
	}


這個方法 返回的是 子佈局的總共有幾種樣式   

有人說 上面子佈局有兩種, type 為什麼返回3  原因是我寫了2 會報  陣列越界異常ArrayIndexOutOfBoundsException: length=3; index=3 

具體原理我還沒搞清楚,因為著急做專案,這個大家如果碰到了,可以研究一下。

然後給子項的第二種佈局適配資料

	        List<String> list = new ArrayList<String>();
	        for (int i = 0; i < mColumn; i++) {
	            int n = childPosition * mColumn + i;
	            if (n < mList.get(groupPosition).getChildList().size()) {
	                list.add(mList.get(groupPosition).getChildList().get(n));
	            }
	        }
			childHolderTwo.adapter.setmList(list);
			childHolderTwo.adapter.notifyDataSetChanged();

這個邏輯的意思是: 拿到對應position 的list,然後add到一個新的list裡面 這個list裡面存的是 一行設定顯示幾條資料,list裡面存入的就是幾跳資料。

這個我不知道我說沒說明白,原始碼我也整理出來了,因為我覺得沒有 原始碼的部落格都不是好程式設計師...

原始碼在這裡 大家下載就行了。

如果還有其它問題,大家可以加我的qq群  Android開發經驗交流群454430053 交流