Recycleviewネストカートンとあなたの知らない解決策について簡単に話します.

1920 ワード

プロジェクトの必要性のため、recycleviewを行う必要があります.ここでは、このネストの代わりに他のコントロールを使用する方法については説明しません.
まず、あなたがネストされているボスがレイアウト方法を与える時間を与えていないと仮定します.この時、あなたのネストされたリストは必ずカートンです.
1画面を超えると、2つの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が表示され、LinearLayoutManagementを呼び出すことができる.setInitialPrefetchItemCount(4)のデフォルト値は2です.
b.recycleviewのサブアイテムキャッシュの設定
rv.setItemViewCacheSize(200);
c.結合を続ける
rv.setHasFixedSize(true);        rv.setNestedScrollingEnabled(false);

ネストされたカートンを完璧に解決
まとめ:カートンは解決したが、このようなやり方は現在サポートされていないグーグル自身はrecycleviewネストを推奨していないこのようなニーズを解決するために、できるだけExpandableListViewのようなサードパーティのコントロールを探して解決しなければならない.