Android ListView中处理嵌套滑动问题,类似ScrollView嵌套ListView
16lz
2021-01-23
前言
- 最近笔者在友情客串去给一培训机构android培训生讲解android初级实际开发技巧中,就提到了这个问题.这里分享下,避免其他童鞋在处理类似的滑动嵌套上走同样的弯路.
- 这里打算用两篇来讲解我们开发中常遇到listView和recyclerView在处理滑动嵌套的时候的最佳解决方案.
实现思路
- 首先第一篇,是我们ListView.ListView相对于recyclerView处理相对要简单一些,因为ListView为我们提供了addHeadView()这个方法,只需要把listview之上的复杂布局全部作为headview填充到listview里面,listview之下的复杂布局全部作为footview填充到listview里面即可.这里给个具体的案例吧.
具体案例
- 这种评论加点赞的页面在任何一款APP里面都非常普遍,一般新手开发者中规中矩的按照scrollview+listview来实现,类似这样:
- 这样做,其实也没有错,只需要对嵌套滑动点击事件进行拦截处理也可以达到效果,不过随着listview的item布局复杂化,你会发现该页面的滑动性能相当差.因此便有了我们下一步的优化.
- 这种做法,无论headview的布局如何复杂,我们只需要暴露出对应的view在adapter里面的对外方法,供其在被调用的activity进行逻辑处理即可.及时嵌套多层的headview,我们也不怕担心数据填充混乱的问题,并且只需要由外到内的填充headview数据即可.
- 这样无论headview和listview的item如何复制,且都不会影响滑动性能.可能说道这里,你应该明白了.接下来,让我们直接上源码把.
实现源码
- 把整个listview之上的复杂布局作为一个布局文件include到listview所在的父布局中.
- 重写listview控件,把该布局在该listview里面去addheadview();
headView = (LinearLayout) inflater.inflate(R.layout.max_pulllist_head, null);/* * 因为本案例是带下拉刷新的listview,因此我们重写的时候,为了避免刷新的view显示出来, * 所以需要将headview的高度先measure出来,在将隐藏的高度减去这个高度 * 最后在addheadview到listview里面 */ comment_imgView.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); contentHeight = comment_imgView.getMeasuredHeight(); measureView(headView); headContentHeight = headView.getMeasuredHeight() - contentHeight;// headContentWidth = headView.getMeasuredWidth(); headView.setPadding(0, -1 * headContentHeight, 0, 0); headView.invalidate(); addHeaderView(headView, null, false);
- 最后就是暴露出headview的get和set方法,供其在外部调用,实现具体业务逻辑
源码下载
- 是不是很简单呢?完整代码点此下载.http://download.csdn.net/detail/qq_28690547/9452247
更多相关文章
- Android逆向案例:干掉梆梆加固免费版的反调试检测
- 【极客学院每日一课】Android系列之三:Android 布局动画
- java(Android)——内存泄露的一些经典案例
- android viewpaper嵌套viewpaper,滑动问题解决
- Android: 一个两点触控的案例
- android之模仿QQ登陆的布局实现
- android中获取一个xml布局中一个控件的宽高.