由於項目需要,需要做到recycleview 這裏先不講如何用其他控件代替這種嵌套的方式
先假定你已經嵌套了 老闆還不給時間給你給佈局方式 那麼這個時候你的這個嵌套列表 必定是卡頓的
只要超過一屏,展示效果會有卡頓現象,原因就是由於兩個RecyclerView的存在,使得滑動的view滑出當前屏幕的釋放存在衝突
每次都執行inflate方法
下面總結網上的幾個神方法
1.最常見 的 recyclerView.setNestedScrollingEnabled(false); 這個方法有可能有效 是可以加的
2.重寫recycleview
public class MyRecycleView extends RecyclerView {
public MyRecycleView(Context context) {
super(context);
}
public MyRecycleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyRecycleView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
//返回false,則把事件交給子控件的onInterceptTouchEvent()處理
return false;
}
@Override
public boolean onTouchEvent(MotionEvent e) {
//返回true,則後續事件可以繼續傳遞給該View的onTouchEvent()處理
return true;
}
}
這個方法確實有效 但是有坑 比如你的外層recycleview無法滑動等等
3.這個方法是博主 “泡在網上的日子”寫的 關於viewpool的使用解決滑動卡頓 的問題,但是我沒有嘗試 ,所以也不知道怎麼樣 ,希望有試過的朋友可以留言指教一二 博客地址 :http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0914/8514.html
4.最後的最後 給一些 神功祕籍 這些簡單粗暴的方法 是可以幫你解決卡頓問題的
a.調用 預加載方法 setInitialPrefetchItemCount(int) 來優化嵌套時預加載性能,例如橫向RecycleView上有3.5個item需要顯示,可以調用LinearLayoutManager.setInitialPrefetchItemCount(4),默認的數值是2。
b.設置recycleview的子項緩存
rv.setItemViewCacheSize(200);
c.繼續結合
rv.setHasFixedSize(true); rv.setNestedScrollingEnabled(false);
完美解決嵌套卡頓
總結:雖然解決了卡頓 但是這種做法目前是不支持的 谷歌本身就不推薦recycleview 嵌套 類似這個需求 我們應該儘可能找類似 ExpandableListView 這些第三方控件來解決