アップドロップダウン・リフレッシュをサポートするRecycleView、android PullToRefresh

3810 ワード

Android開発では、ドロップダウンでリフレッシュできるリストが非常に一般的な機能です.従来の項目ではListViewを用いて実装されていたが,一般に実装された原理はListViewにヘッダビュー+ジェスチャー操作を追加することである.
Android V 7パッケージにRecycleViewが登場すると、多くの開発者がListViewを捨ててRecycleViewをそのまま使用する.
ただし、プロジェクトではアップドロップダウン・リフレッシュ機能を実現する必要があるため、RecycleViewにアップドロップダウン・リフレッシュをサポートさせる必要がある.
ネットで検索すると、RecycleViewsのドロップダウンに関する資料がたくさん見つかりますが、すべてSwipeRefreshLayoutと 組み合わせて使う.しかし、SwipeRefreshLayoutドロップダウン・リフレッシュの効果はプロジェクトのニーズに合わないことが多く、ほとんどのニーズ効果はandroid PullToRefreshに似ています.そこでandroid PullToRefreshのようなドロップダウン・リフレッシュを実現する方法を考えています.
androidPullToRefreshソースコード(後にソースコードと略称する)を見てみると、androidPullToRefreshフレームワークは上のプルダウンのリフレッシュ操作パッケージに特に優れているので、androidPullToRefreshフレームワークを直接使用しています.
ソースコードの検出を表示すると、PullToRefreshWebView、PullToRefreshScrollViewはPullToRefreshBaseから継承されます.PullToRefreshBaseは主に上ドロップダウンのジェスチャー操作と上ドロップダウンの効果をカプセル化していますが、PullToRefreshBaseが実現した私の機能を直接継承できますか?
PullToRefreshBaseには4つの方法が必要で、この方法を実現すれば、ドロップダウン効果を追加することができます. android PullToRefreshの作者32人のためにいいね!!!
具体的な操作は以下の通りです.
public class WanRecycleView extends PullToRefreshBase {

    public WanRecycleView(Context context) {
        super(context);
    }

    public WanRecycleView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public WanRecycleView(Context context, Mode mode) {
        super(context, mode);
    }

    public WanRecycleView(Context context, Mode mode, AnimationStyle animStyle) {
        super(context, mode, animStyle);
    }

    //  4   
    //1     
    @Override
    public Orientation getPullToRefreshScrollDirection() {
        return Orientation.VERTICAL;
    }

    //  4   
    //2     View
    @Override
    protected RecyclerView createRefreshableView(Context context, AttributeSet attrs) {
        RecyclerView view = new RecyclerView(context, attrs);
        return view;
    }

    //  4   
    //3        
    @Override
    protected boolean isReadyForPullEnd() {
        View view = getRefreshableView().getChildAt(getRefreshableView().getChildCount() - 1);
        if (null != view) {
            return getRefreshableView().getBottom() >= view.getBottom();
        }
        return false;
    }

    //  4   
    //4        
    @Override
    protected boolean isReadyForPullStart() {
        View view = getRefreshableView().getChildAt(0);

        if (view != null) {
            return view.getTop() >= getRefreshableView().getTop();
        }
        return false;
    }

}

github:https://github.com/Wan7451/Wan_RecycleViewAdapter
このコンポーネントの使い方はPullToRefreshViewの使い方と同じで、人のフレームワークに基づいて書かれているからです.
 mainView.setScrollingWhileRefreshingEnabled(true);
        mainView.setMode(PullToRefreshBase.Mode.BOTH);
        mainView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase refreshView) {
                Toast.makeText(MainActivity.this, "    ", Toast.LENGTH_SHORT).show();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        mainView.onRefreshComplete();
                    }
                }, 4000);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase refreshView) {
                Toast.makeText(MainActivity.this, "    ", Toast.LENGTH_SHORT).show();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        mainView.onRefreshComplete();
                    }
                }, 4000);
            }
        });