SwipeRefreshLayout下拉刷新跟listview下拉滑动冲突解决
来源:互联网 发布:国际结算知乎 编辑:程序博客网 时间:2024/04/23 17:11
当SwipeRefreshLayout内嵌listview的时候,滑动listview的时会启动swipeRefreshLayout的下拉刷新。我使用的解决办
法是设置listview的滑动监听,重写滑动监听器,通过判断listview的第一可视item的index来判断是否需要刷新,如果不
需要就把swipeRefreshLayout设置成不可滑动,否则设置成可滑动。我的listview放在了fragment里面,所以我用了最笨的方法,在fragment的构造方法里把activity的swipeRefreshLayout
对象传递给了fragment:
MyManageFragmentmanageFragment = new MyManageFragment(
swipeRefreshLayout);transation.add(R.id.activity_mydevice_container, manageFragment);transation.commit();
然后在fragment的onCreateView里面设置其listview的滑动监听:
listview.setOnScrollListener(new SwpipeListViewOnScrollListener(swipeRefreshLayout));
然后重写滑动监听器,通过判断listview的第一个可视的item的位置来决定是下拉刷新还是下滑,判断到是下滑的时候,
通过设置传入的swipeRefreshLayout对象使其不可用:
swipeRefreshLayout
.setEnabled(false);
重写监听器:
/** * 由于Listview与下拉刷新的Scroll事件冲突, 使用这个ScrollListener可以避免Listview滑动异常 */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); } }}
PS: 一开始想在activity里获取到frgment里面的listview对象,在activity里设置listview的滑动监听器,但是没有成功,对
于fragment和activity的交互,理解还不是很够。
MyManageFragmentmanageFragment = new MyManageFragment(
);
transation.add(R.id.activity_mydevice_container, manageFragment,"mymanage_fragment");
transation.commit();
getSupportFragmentManager().executePendingTransactions(); //1--------------MymanageFragment myManageFragment = (MymanageFragment) getSupportFragmentManager().findFragmentByTag("mymanage_fragment");if (myManageFragment != null) { ListView listView = (ListView) myManageFragment.getView().findViewById(R.id.listview_mymanage); listView.setOnScrollListener(new SwpipeListViewOnScrollListener(swipeRefreshLayout));} else { toast("myManageFragment is null");}其中 myManageFragment.getView()返回的是null,有待进一步解决
0 0
- SwipeRefreshLayout下拉刷新跟listview下拉滑动冲突解决
- 解决listview下拉与SwipeRefreshLayout下拉刷新冲突
- 解决SwipeRefreshLayout下拉刷新与ListView下拉的冲突
- SwipeRefreshLayout下拉刷新冲突解决
- SwipeRefreshLayout下拉刷新冲突解决
- SwipeRefreshLayout 嵌套PullToRefreshListView下拉刷新冲突解决
- viewpager和SwipeRefreshLayout下拉刷新冲突解决
- SwipeRefreshLayout下拉刷新与下拉控件冲突解决
- 解决使用`SwipeRefreshLayout`下拉刷新和左右滑动事件冲突的问题
- 两句代码解决ViewPager滑动与SwipeRefreshLayout下拉刷新冲突
- ViewPager左右滑动与SwipeRefreshLayout下拉刷新冲突
- android,SwipeRefreshLayout,listview下拉刷新
- 解决SwipeRefreshLayout和webview下拉刷新冲突问题
- Android WebView下拉刷新与SwipeRefreshLayout事件冲突解决
- Android SwipeRefreshLayout 嵌套 CoordinatorLayout 下拉刷新 事件冲突解决
- 解决SwipeRefreshLayout下拉刷新与SwipeMenuListView的冲突
- 解决SwipeRefreshLayout和webview下拉刷新冲突问题
- android之listview滑动与下拉刷新冲突 : listview未到顶部便出现下拉刷新
- idea如何查看jar包的源代码(非反编译)
- junit单元测试的Test注解
- 关于 iw
- Hibernate属性级别注解
- oracle数据库操作系统CPU利用率居高不下
- SwipeRefreshLayout下拉刷新跟listview下拉滑动冲突解决
- Flask 路由 route
- java算法-数的长度(斯特林公式)
- 新年第一天上班
- webpack之旅01-概述
- __weak修饰后再block中使用__strong修饰问题
- 可以放在页面任何地方de 天气插件
- linux ftpusers和user_list 区别
- [USACO2.2]集合 Subset Sums