android之listview滑动与下拉刷新冲突 : listview未到顶部便出现下拉刷新
2016-12-27 14:04
513 查看
最近遇到个棘手问题,找了好久终于找到了先例。
问题是这个样子的,支持下拉刷新的listview有一段占据整个屏幕的headerview,
触摸在headerview的地方滑动,却牵扯出下拉刷新,而我只是想滑动而已。百思不得其解。
功夫不负有心人,后来我终于找了解决办法。
android下拉刷新和listview冲突 - listview不能下拉到头部
http://blog.csdn.net/u012246458/article/details/51606056
总结一下的话应该算是listview里header部分的滑动跟listview的下拉刷新冲突了。
在listview里添加如下代码:
此处分割线=========================
这个问题是解决了,我还沾沾自喜呢,不过偶然间碰见了另一个问题,是什么呢?
就是我这个界面还有外面一层的viewpager。就是我这个界面只是一个fragment,只是viewpager的一页。而外围的viewpager是可以左右滑动的,问题就是当前的这个页面的listview按照上边的方法搞了以后,当前页面就不能左右滑了。这个就比较尴尬了啊。做项目最讨厌的就是这个了,改一个问题牵扯到别的问题。唉。不过从另一个角度想,也只有这样才能不断进步。
然后我又去百度了,这次知道是什么问题了,好找一些。
如下:
判断Listview滑到顶部的最精准方案,解决Listview设置EmptyView与SwipeRefreshLayout冲突
http://blog.csdn.net/TellH/article/details/50662634
内容很多,博主写了他披荆斩棘的历程。有些人可能并不愿意看,只想吃别人嚼碎的喂给他吃,那好,如下就是解决办法:
这次不是在listview里写了,是在界面里写:
这样就不会引起事件分发导致的冲突了。对了,上面的那个就可以删掉了。
原理
给listview设置监听器,只要listview的第一个item的顶部y坐标值等于listview的顶部y坐标值表明listview到达了顶部
搞定!!!
相当有成就感的说!!!
又一条分隔线==============================================
我还是太天真,楼上的还有个问题,我睡了一晚好觉,第二天才发现的,当我滑来滑去,滑到顶部的时候,居然滑不出来下拉刷新。得再滑一遍才行。我靠,对于追求精益求精的我一想,这怎么能行!
索性研究一番,看看哪里出了问题,解铃还需系铃人,我又去阅读了一遍楼上的博文。突然发现,他上边实验时候用的是onscroll,怎么最终版本用了onTouch。
心思缜密的我觉得是不是这个出了问题呢?不管三七二十一,先试了再说。(其实就是死马当活马医。。。)
哎嗨,搞定!!!
代码如下:
换汤不换药,但是搞定了,哈哈哈。(不对,还是不要高兴太早。以免打脸,哎哟我的脸,都肿了。)
问题是这个样子的,支持下拉刷新的listview有一段占据整个屏幕的headerview,
触摸在headerview的地方滑动,却牵扯出下拉刷新,而我只是想滑动而已。百思不得其解。
功夫不负有心人,后来我终于找了解决办法。
android下拉刷新和listview冲突 - listview不能下拉到头部
http://blog.csdn.net/u012246458/article/details/51606056
总结一下的话应该算是listview里header部分的滑动跟listview的下拉刷新冲突了。
在listview里添加如下代码:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (getFirstVisiblePosition() == 0 && getChildAt(0).getTop() == 0) {//到头部了 getParent().requestDisallowInterceptTouchEvent(false);//放行触摸 } else {//没有到头部 getParent().requestDisallowInterceptTouchEvent(true);//拦截触摸 } return super.onInterceptTouchEvent(ev); }
此处分割线=========================
这个问题是解决了,我还沾沾自喜呢,不过偶然间碰见了另一个问题,是什么呢?
就是我这个界面还有外面一层的viewpager。就是我这个界面只是一个fragment,只是viewpager的一页。而外围的viewpager是可以左右滑动的,问题就是当前的这个页面的listview按照上边的方法搞了以后,当前页面就不能左右滑了。这个就比较尴尬了啊。做项目最讨厌的就是这个了,改一个问题牵扯到别的问题。唉。不过从另一个角度想,也只有这样才能不断进步。
然后我又去百度了,这次知道是什么问题了,好找一些。
如下:
判断Listview滑到顶部的最精准方案,解决Listview设置EmptyView与SwipeRefreshLayout冲突
http://blog.csdn.net/TellH/article/details/50662634
内容很多,博主写了他披荆斩棘的历程。有些人可能并不愿意看,只想吃别人嚼碎的喂给他吃,那好,如下就是解决办法:
这次不是在listview里写了,是在界面里写:
这样就不会引起事件分发导致的冲突了。对了,上面的那个就可以删掉了。
listview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { Log.d("Measure","listview.getListPaddingTop():"+listview.getListPaddingTop()+ " listview.getTop():"+listview.getTop()+"listview.getChildAt(0).getTop():"+listview.getChildAt(0).getTop()); if (listview.getFirstVisiblePosition() == 0 && listview.getChildAt(0).getTop() >= listview.getListPaddingTop()) { refrashLayout.setEnabled(true); Log.d("TAG", "reach top!!!"); }else refrashLayout.setEnabled(false); } return false; } });
原理
给listview设置监听器,只要listview的第一个item的顶部y坐标值等于listview的顶部y坐标值表明listview到达了顶部
搞定!!!
相当有成就感的说!!!
又一条分隔线==============================================
我还是太天真,楼上的还有个问题,我睡了一晚好觉,第二天才发现的,当我滑来滑去,滑到顶部的时候,居然滑不出来下拉刷新。得再滑一遍才行。我靠,对于追求精益求精的我一想,这怎么能行!
索性研究一番,看看哪里出了问题,解铃还需系铃人,我又去阅读了一遍楼上的博文。突然发现,他上边实验时候用的是onscroll,怎么最终版本用了onTouch。
心思缜密的我觉得是不是这个出了问题呢?不管三七二十一,先试了再说。(其实就是死马当活马医。。。)
哎嗨,搞定!!!
代码如下:
listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(firstVisibleItem == 0 && view.getChildAt(0).getTop() >= view.getListPaddingTop()){ listView.setMode(PullToRefreshBase.Mode.PULL_FROM_START); LogUtils.e("listview+TAG" + "reach top!!!"); }else { listView.setMode(PullToRefreshBase.Mode.DISABLED); } } });
换汤不换药,但是搞定了,哈哈哈。(不对,还是不要高兴太早。以免打脸,哎哟我的脸,都肿了。)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件