SwipeRefreshLayout 嵌套PullToRefreshListView下拉刷新冲突解决
2016-03-21 11:57
459 查看
SwipeRefreshLayout 嵌套PullToRefreshListView ,当我往下滑动一定距离,然后想往上滑动时,发现scroll事件已经被SwipeRefreshLayout拦截,解决办法如下:
一、实现OnScrollListener接口
/** 由于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设置ScrollListener
SwpipeListViewOnScrollListener scrollListener = new SwpipeListViewOnScrollListener(swiperefreshlayout);
refreshListView.setOnScrollListener(scrollListener);
一、实现OnScrollListener接口
/** 由于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设置ScrollListener
SwpipeListViewOnScrollListener scrollListener = new SwpipeListViewOnScrollListener(swiperefreshlayout);
refreshListView.setOnScrollListener(scrollListener);
相关文章推荐
- CUDA和GPU介绍及两者之间的关系
- 酷狗音乐模仿还在继续
- HTTP状态码
- javascript算法与数据结构之栈
- cocapods 使用及问题
- deque
- phpmyadmin安装教程及配置设置
- 网络面试题:TCP和UDP的9个区别是什么
- css direction
- checkbox 全选、半选、不选设置
- PHP进阶:写入内容到文件
- 窗口风格
- iOS学习路线历程
- ubuntu下的samba配置
- iOS AssetsLibrary和Photos的使用总结: 权限及相册的获取(1)
- Linux的IO复用
- 解决Eclipse复制粘贴出现卡屏的问题
- 超市守店等死?还是抓住社区电商这根救命稻草?
- 利用内容提供者插入sms(装B程序)
- 设计模式--单例模式C++实现