ScrollView、SwipeRefreLayout、ListView的滑动冲突问题
来源:互联网 发布:hadoop大数据平台 编辑:程序博客网 时间:2024/05/18 05:46
1、SwipeRefreLayout嵌套ListView的滑动冲突:
有时候你用ListView时想用到原生的下拉刷新,用SwipeRefreLayout嵌套ListView后发现初始ListView还能向上滑动,可是当你滑动到ListView的底部的时候发现再往下滑动就是刷新了,我再想回到上面去查看我的item内容就不行了。这是因为Android的事件分发机制,外层的SwipeRefreLayout拦截了下滑手势并且消费了事件,里面的ListView自然也就无法下滑了。那么怎么解决这一冲突呢?很简单SwipeRefreLayout提供了一个setEnabled(boolean flag),我们只需要对ListView设置滚动监听在onScroll()方法内处理即可。贴代码:
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { boolean enable=false; if(mListView != null && mListView.getChildCount() > 0){//获得ListView当前显示的第一个item的idboolean firstItemVisible = mListView.getFirstVisiblePosition() == 0;//ListView的顶部距离上面的距离=0boolean topOfFirstItemVisible = mListView.getChildAt(0).getTop() == 0; // 综合上面两个判断条件来设置SwipeRefreLayout enable = firstItemVisible && topOfFirstItemVisible; } mSwipeRefreshLayout.setEnabled(enable); } });2、ScrollView嵌套ListView时只显示一条的问题:方法来源点击打开链接//解决scrollView嵌套listview只显示一条数据的问题public void setListViewHeightBasedOnChildren(ListView listView) { // 获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); // 将view.measure(0,0)设置为0的时候表示,此时不需要考虑父控件的布局问题,直接使用getMeasuredWidth和getMeasuredHeight获取此view的自身的实际大小 listItem.measure(0, 0); // 统计所有子项的总高度 totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1)); // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params);}有一点要说明:这种方法要在ListView.setAdapter(adapter)之后使用方法要在ListView.setAdapter(adapter)之后使用
方法要在ListView.setAdapter(adapter)之后使用
才有效,为什么上面的代码:ListAdapter listAdapter = listView.getAdapter();
0 0
- ScrollView、SwipeRefreLayout、ListView的滑动冲突问题
- Android的ScrollView和ListView滑动冲突的问题
- 解决ListView在ScrollView中滑动冲突的问题
- 安卓解决viewPager+scrollView+listView滑动冲突的问题
- 解决ScrollView嵌套ListView滑动冲突显示不全的问题
- ScrollView与Listview嵌套使用时的滑动冲突问题
- Android ScrollView中嵌套ListView,滑动冲突问题的解决
- 完美解决listView和ScrollView滑动冲突的问题
- Android ScrollView中嵌套ListView,滑动冲突问题的解决
- ListView与ScrollView滑动冲突问题
- Android ScrollView和ListView滑动冲突问题
- ScrollView和ListView滑动冲突问题
- ScrollView嵌套ListView滑动冲突问题
- listView scrollview滑动冲突
- 新手上路,scrollview 嵌套listview scrollview嵌套scrollview滑动冲突等问题的学习
- ListView与ScrollView的滑动冲突解决方法
- ScrollView和ListView的滑动冲突解决
- 解决ListView与ScrollView的滑动冲突
- 格灵深瞳 CEO 赵勇深度总结:揭开国内智能安防与人脸识别的真实现状
- 波束赋形
- spring mvc 给action添加事务不成功的原因
- Eclipse安装Maven插件
- sublimeText3 3126 注册码
- ScrollView、SwipeRefreLayout、ListView的滑动冲突问题
- 一道算法题,机器人漫步
- 如何利用MFC及Opencv读入摄像头并显示画面
- Delphi操作ACCESS技巧集
- 关于.dll文件的注册,如何注册.dll文件
- android开启未知来源
- C++的count和cout_if函数
- Delphi中ShellExecute的妙用
- 滑桿(createTrackbar)