解决ListView显示不全、滑动冲突问题

简介: 解决ListView显示不全、滑动冲突问题

在开发中,ListView是使用得最多的控件,有时候会遇到ListView因为各种原因引起的数据显示不全,例如,嵌套了ScrollView等。这个解决的办法很多,这里记录一下我自己用过的方法,本人亲测有效。

第一种:

/**
 * 设置listview高度的方法
 * @param listView
 */
public void setListViewHeight(ListView listView) {
 //获取ListView对应的Adapter
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }
    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {//listAdapter.getCount()返回数据项的数目
        View listItem = listAdapter.getView(i, null, listView);   //获得每个子item的视图
        listItem.measure(0, 0);   //先判断写入的widthMeasureSpec和heightMeasureSpec是否和当前的值相等,如果不等,重新调用onMeasure(),计算子项View 的宽高
        totalHeight += listItem.getMeasuredHeight();   //累加不解释,统计所有子项的总高度
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));   //加上每个item之间的距离,listView.getDividerHeight()获取子项间分隔符占用的高度
    listView.setLayoutParams(params);//params.height最后得到整个ListView完整显示需要的高度
}



  这个方法需要在ListView.setAdapter(adapter)之后调用,这样就可以把数据显示完全了,这个方法可以写到工具类里面,然后直接调用。

第二种方法:

    /***
     * 設置listview的高度結局滑動衝突
     * 
     * @param statisticsTO
     */
    public void setListvHeight(StatisticsTO statisticsTO) {
        int size = statisticsTO.getData().size();
        int totalHeight = 0;
        for (int i = 0; i < size; i++) {
            View listItem = myAdapter.getView(i, null,
                    liststatistics);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = liststatistics.getLayoutParams();
        params.height = totalHeight
                + (liststatistics.getDividerHeight() * (size - 1));
        liststatistics.setLayoutParams(params);
    }



这种方法其实和第一种方法是类似的,只不过这里传入的是数据的实体。

第三种方法:

  第三种方法就是自定义ListView,然后重写onMeasure方法,这个可以解决ListView的滑动冲突,百度上说的最多的就是这种方法。

public class CustomListView extends ListView{
public CustomListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int spec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, spec);
}
}









相关文章
vue3配置路由报错Catch all routes (“*“) must now be defined using a param with a custom regexp.
vue3配置路由报错Catch all routes (“*“) must now be defined using a param with a custom regexp.
691 0
|
5月前
|
Python
Python 3.7.0 安装教程:环境变量配置+自定义路径(64位)
Python是成熟稳定的面向对象通用编程语言。本文详解Python 3.7.0离线安装全流程:含下载地址、系统位数选择、管理员运行、PATH配置、自定义路径(推荐D盘Python37)及IDLE验证,步骤清晰,零基础可快速完成部署。(239字)
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
1965 78
|
SQL 人工智能 移动开发
Android 遍历界面所有的View
本文讲述如何遍历获取页面中所有的view,并输出对应的id,textview文本内容,imageview实际大小及设置的图片大小。 可用于检测android应用中的大图。
|
算法 API C#
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
最终优化实现ButtonPro按钮(继承自Button),既提供Button原生功能,又提供扩展功能,除了圆角以外,还实现了圆形、圆角矩形的脚尖效果、边框大小和颜色、背景渐变颜色...
4161 0
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
|
移动开发 定位技术 iOS开发
HTML5 Geolocation(地理定位)3
本页介绍如何在地图上显示用户位置,并利用地理定位获取给定位置的详细信息,包括更新本地信息、显示周边兴趣点及实现车载导航。通过 `getCurrentPosition()` 方法可获取用户当前位置的详细数据,如经纬度、精度等。`watchPosition()` 方法则持续跟踪用户位置变化,适用于实时导航。示例代码展示了如何使用这些方法获取并显示位置信息。
|
算法 Serverless 数据安全/隐私保护
【C++ 函数 基本教程 第三篇 】深度解析C++函数类型:探寻全局函数、成员函数与静态函数的奥秘
【C++ 函数 基本教程 第三篇 】深度解析C++函数类型:探寻全局函数、成员函数与静态函数的奥秘
1197 1
|
Java 关系型数据库 MySQL
NUL (NULL) - ASCII值0 (0x00)
NUL (NULL) - ASCII值0 (0x00)
3127 2
|
Ubuntu 开发工具 git
git 超实用教程【人人必会!】(含大厂的 git 操作规范)
git 超实用教程【人人必会!】(含大厂的 git 操作规范)
895 0
|
JavaScript 小程序 前端开发
js获取当前日期,格式为YYYY-MM-DD
js获取当前日期,格式为YYYY-MM-DD
1269 0
js获取当前日期,格式为YYYY-MM-DD

热门文章

最新文章