Android:SwipeRefreshLayout+RecyclerView.onScrollListener冲突解决
提供一个简单的解决方式,首先重写onScrollListener内部的onScrolled方法,即滚动完成后,我们进行判断。
判断RecyclerView可见的item位于第一个的时候,使swipeRefresh获取焦点,不走ScrollListener,当不在第一个不在屏幕内显示的时候,走ScrollListener。
下面放代码
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//判断RecyclerView可见的item位于第一个的时候,使swipeRefresh获取焦点,不走ScrollListener,当不在第一个不在屏幕内显示的时候,走ScrollListener
int topRowVerticalPosition =
(recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
//走swipeRefresh
swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0);
if (topRowVerticalPosition < 0)
{
//走ScrollListener 写具体内容
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
}