SwipeRefreshLayoutネストPullToRefreshListViewドロップダウンリフレッシュ競合解決

1843 ワード

SwipeRefreshLayoutネストPullToRefreshListViewは、一定距離下にスライドして上にスライドしようとすると、scrollイベントがSwipeRefreshLayoutによってブロックされていることに気づきました.解決策は次のとおりです.
一、OnScrolListenerインタフェースを実現する
/**   PullToRefreshListView      Scroll    ,     ScrollListener    PullToRefreshListView     */
public class SwpipeListViewOnScrollListener implements AbsListView.OnScrollListener  {
    private SwipeRefreshLayout mSwipeView;
    private AbsListView.OnScrollListener mOnScrollListener;

    public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView) {
        mSwipeView = swipeView;
    }

    public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView,AbsListView.OnScrollListener onScrollListener) {
        mSwipeView = swipeView;
        mOnScrollListener = onScrollListener;
    }

    @Override
    public void onScrollStateChanged(AbsListView absListView, int i) {
    }

    @Override
    public void onScroll(AbsListView absListView, int firstVisibleItem,
                         int visibleItemCount, int totalItemCount) {
        View firstView = absListView.getChildAt(firstVisibleItem);

        //  firstVisibleItem  0 。  firstView==null      ,    ;  top==0          ,      
        if (firstVisibleItem == 0 && (firstView == null || firstView.getTop() == 0)) {
            mSwipeView.setEnabled(true);
        } else {
            mSwipeView.setEnabled(false);
        }
        if (null != mOnScrollListener) {
            mOnScrollListener.onScroll(absListView, firstVisibleItem,
                    visibleItemCount, totalItemCount);
        }
    }
}

二、PullToRefreshListViewにScrolListenerを設定する
SwpipeListViewOnScrollListener scrollListener = new SwpipeListViewOnScrollListener(swiperefreshlayout);
 refreshListView.setOnScrollListener(scrollListener);