前言

  • 最近笔者在友情客串去给一培训机构android培训生讲解android初级实际开发技巧中,就提到了这个问题.这里分享下,避免其他童鞋在处理类似的滑动嵌套上走同样的弯路.
  • 这里打算用两篇来讲解我们开发中常遇到listView和recyclerView在处理滑动嵌套的时候的最佳解决方案.

实现思路

  • 首先第一篇,是我们ListView.ListView相对于recyclerView处理相对要简单一些,因为ListView为我们提供了addHeadView()这个方法,只需要把listview之上的复杂布局全部作为headview填充到listview里面,listview之下的复杂布局全部作为footview填充到listview里面即可.这里给个具体的案例吧.

具体案例

Android ListView中处理嵌套滑动问题,类似ScrollView嵌套ListView_第1张图片

  • 这种评论加点赞的页面在任何一款APP里面都非常普遍,一般新手开发者中规中矩的按照scrollview+listview来实现,类似这样:
    Android ListView中处理嵌套滑动问题,类似ScrollView嵌套ListView_第2张图片
  • 这样做,其实也没有错,只需要对嵌套滑动点击事件进行拦截处理也可以达到效果,不过随着listview的item布局复杂化,你会发现该页面的滑动性能相当差.因此便有了我们下一步的优化.
    Android ListView中处理嵌套滑动问题,类似ScrollView嵌套ListView_第3张图片
  • 这种做法,无论headview的布局如何复杂,我们只需要暴露出对应的view在adapter里面的对外方法,供其在被调用的activity进行逻辑处理即可.及时嵌套多层的headview,我们也不怕担心数据填充混乱的问题,并且只需要由外到内的填充headview数据即可.
  • 这样无论headview和listview的item如何复制,且都不会影响滑动性能.可能说道这里,你应该明白了.接下来,让我们直接上源码把.

实现源码

  1. 把整个listview之上的复杂布局作为一个布局文件include到listview所在的父布局中.
  2. 重写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);
  1. 最后就是暴露出headview的get和set方法,供其在外部调用,实现具体业务逻辑

源码下载

  • 是不是很简单呢?完整代码点此下载.http://download.csdn.net/detail/qq_28690547/9452247

更多相关文章

  1. Android逆向案例:干掉梆梆加固免费版的反调试检测
  2. 【极客学院每日一课】Android系列之三:Android 布局动画
  3. java(Android)——内存泄露的一些经典案例
  4. android viewpaper嵌套viewpaper,滑动问题解决
  5. Android: 一个两点触控的案例
  6. android之模仿QQ登陆的布局实现
  7. android中获取一个xml布局中一个控件的宽高.

随机推荐

  1. Mysqlbackup 3.9.0 企业级备份工具
  2. R的数据库访问-MySQL
  3. 不能安装mysql-connector-odbc-5.2.6-win
  4. 如何通过mysql查询获得具有不同时区的事
  5. JDBC与SQLServer的连接
  6. org.json Android系统错误。JSONExceptio
  7. 求助关于MYSQL导出多个库问题。
  8. 深入理解Mysql索引底层数据结构与算法
  9. MySQL“在”查询中非常慢,但是带有显式的
  10. Amoeba实现Mysql主从复制读写分离