本篇文章主要介绍了"Android ListView中处理嵌套滑动问题,类似ScrollView嵌套ListView",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下:
前言最近笔者在友情客串去给一培训机构android培训生讲解android初级实际开发技巧中,就提到了这个问题.这里分享下,避免其他童鞋在处理类似的滑动嵌套上走...
前言
- 最近笔者在友情客串去给一培训机构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方法,供其在外部调用,实现具体业务逻辑
源码下载
').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('
').text(i));
};
$numbering.fadeIn(1700);
});
});
以上就介绍了Android ListView中处理嵌套滑动问题,类似ScrollView嵌套ListView,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_362069.html