淺談Recycleview嵌套卡頓 以及你所不知道的解決方案

由於項目需要,需要做到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 這些第三方控件來解決

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章