今天上的是一個可折疊的RecyclerView SectionedExpandableGridRecyclerView(名字好長)
先上下效果圖:
因為是RecyclerView 那這些點擊、折疊都是自己寫的事件了,所以還是感謝作者!!!<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPmhvdyB0byB1c2U/PC9wPg0KPHA+0vLOqtSt1/fV38O709DX9iBqY2VudGVyz8LU2MTHw7TO0sPHvs3Wu8TcILDRtPrC67rN18rUtM7EvP62vENvcHm9+Milwcs8L3A+DQo8cD48aW1nIGFsdD0="這裡寫圖片描述" src="http://www.2cto.com/uploadfile/Collfiles/20160229/20160229092401217.png" title="\" />
這些都弄進去
那來看看是怎麼使用的,把創建,初始化,調用這些事好好瞅瞅。
看看使用這個控件要傳些什麼
public SectionedExpandableLayoutHelper(Context context, RecyclerView recyclerView, ItemClickListener itemClickListener,int gridSpanCount)
需要傳4個參數分別為:
Context context 上下文對象
RecyclerView recyclerView 控件容器對象
ItemClickListener itemClickListener 點擊事件對象
int gridSpanCount 每行顯示多少個Item數
上面的GIF gridSpanCount傳入的是3,再貼個傳入2的給大家看看
對了再說下XML的引用
只是當普通的RecyclerView使用就好了
那數據源怎麼操作呢?
ArrayList- arrayList = new ArrayList<>();
arrayList.add(new Item("iPhone", 0));
arrayList.add(new Item("iPad", 1));
arrayList.add(new Item("iPod", 2));
arrayList.add(new Item("iMac", 3));
sectionedExpandableLayoutHelper.addSection("Apple Products", arrayList);
作者對數據層進行了一定封裝,使得setAdapter()的操作,並不在我們的業務層出現。
而是在控件初始化時進行了設置(不過這時候數據集合是空的)
public SectionedExpandableLayoutHelper(Context context, RecyclerView recyclerView, ItemClickListener itemClickListener,
int gridSpanCount) {
//setting the recycler view
GridLayoutManager gridLayoutManager = new GridLayoutManager(context, gridSpanCount);
recyclerView.setLayoutManager(gridLayoutManager);
mSectionedExpandableGridAdapter = new SectionedExpandableGridAdapter(context, mDataArrayList,
gridLayoutManager, itemClickListener, this);
recyclerView.setAdapter(mSectionedExpandableGridAdapter);
}
然後在notifyDataSetChanged()
時進行數據的刷新(無論是主動還是被動都是在這操作)
反正你如果數據發橫了變化 記得刷一刷 notifyDataSetChanged()
欄目的監聽走這
@Override
public void itemClicked(Item item) {
Toast.makeText(this, "Item: " + item.getName() + " clicked", Toast.LENGTH_SHORT).show();
}
每一個Item的監聽走這
@Override
public void itemClicked(Section section) {
Toast.makeText(this, "Section: " + section.getName() + " clicked", Toast.LENGTH_SHORT).show();
}
這兩個事件的set方法都省去了,因為構造函數裡已經做了這事,當然如果你不需要,那麼久空著吧。
源碼地址:https://github.com/ddwhan0123/SectionedExpandableGridRecyclerView/archive/master.zip