簡介
公司項目要實現(xiàn)一個復雜列表,并且單選的功能纲酗。
- RecyclerView嵌套RecyclerView衰腌,外層的 RecyclerView是豎直方向,內(nèi)層的 RecyclerView 是橫向的滑動
- 解決滑動的沖突卡頓現(xiàn)象
- 實現(xiàn)內(nèi)層條目長按選中觅赊,單擊取消選擇
走的彎路:設置setFocusableInTouchMode等網(wǎng)上的一些方法都沒湊效
先看效果圖
Oct-11-2018 21-00-51.gif
關鍵代碼
建立緩存池緩存 View
//修改RecyclerView的item緩存?zhèn)€數(shù)右蕊,緩存?zhèn)€數(shù) = 集合長度
RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
viewPool.setMaxRecycledViews(RvAdapter.ITEM_TYPE, mBean.getDatas().size());
mRecyclerView.setRecycledViewPool(viewPool);
//重寫改方法,設置ItemViewType
@Override
public int getItemViewType(int position) {
//返回值與使用時設置的值需保持一致
return ITEM_TYPE;
}
/*
1.把內(nèi)部RecyclerView的adapter和集合數(shù)據(jù)通過holder緩存
2.使內(nèi)部RecyclerView的adapter提供設置position的方法
*/
holder.list.clear();
holder.list.addAll(mList.get(position).getJarInfo());
if (holder.mRvAdapter == null) {
holder.mRvAdapter = new RvvAdapter(mContext, holder.list, position);
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
holder.rvItemItem.setLayoutManager(layoutManager);
holder.rvItemItem.setAdapter(holder.mRvAdapter);
} else {
holder.mRvAdapter.setPosition(position);
holder.mRvAdapter.notifyDataSetChanged();
}
其實把……這個東西研究了一陣子吮螺,沒實現(xiàn)饶囚,還是來自 CSDN的SkySmile1992幫助了我,以上的關鍵代碼都是他給寫的鸠补,在此感謝萝风。
有更好實現(xiàn)方式的歡迎溝通,謝謝紫岩。