解决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);
}
}









相关文章
|
7月前
|
XML 前端开发 测试技术
如何使用 Postman 发送 POST XML 请求?
使用 Postman 发送带有 XML 数据的 POST 请求。我们将引导您完成将 XML 数据有效发送到 Web 服务或 API 的步骤,使处理这种常见数据格式变得简单易行。
|
4月前
|
存储 人工智能 自然语言处理
企业AI知识库搭建指南
中关村科金得助智能企业知识库基于AI大模型,支持多格式文档上传与自动解析,具备智能问答、内容生成、精准搜索等功能,助力企业高效构建产品文档、技术手册、FAQ等知识体系。
|
12月前
|
移动开发 定位技术 iOS开发
HTML5 Geolocation(地理定位)3
本页介绍如何在地图上显示用户位置,并利用地理定位获取给定位置的详细信息,包括更新本地信息、显示周边兴趣点及实现车载导航。通过 `getCurrentPosition()` 方法可获取用户当前位置的详细数据,如经纬度、精度等。`watchPosition()` 方法则持续跟踪用户位置变化,适用于实时导航。示例代码展示了如何使用这些方法获取并显示位置信息。
|
并行计算 Linux 开发工具
物体检测框架YoloDotNet初体验
【11月更文挑战第3天】YoloDotNet 是一个基于 .Net 平台的物体检测框架,支持多种视觉任务,包括物体检测、分类、OBB 检测、分割和姿态估计。安装过程较为复杂,需要配置 CUDA 和 CUDNN 支持 GPU 加速。代码简洁易用,检测速度快且准确,适用于实时应用。该框架跨平台、开源免费,适合熟悉 .Net 的开发者使用。
546 4
|
JSON Java 数据格式
Java系列之:生成JSON字符串
这篇文章介绍了两种在Java中生成JSON字符串的方法:使用`JSONObject`类及其`toJSONString`方法来动态生成,以及手动拼接字符串的方式来创建JSON格式的字符串。
Java系列之:生成JSON字符串
|
供应链 监控 调度
ERP系统中的销售订单处理与交付跟踪解析
【7月更文挑战第25天】 ERP系统中的销售订单处理与交付跟踪解析
981 0
ERP系统中的销售订单处理与交付跟踪解析
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
683 0
|
算法 Java API
Android性能优化面试题经典之ANR的分析和优化
Android ANR发生于应用无法在限定时间内响应用户输入或完成操作。主要条件包括:输入超时(5秒)、广播超时(前台10秒/后台60秒)、服务超时及ContentProvider超时。常见原因有网络、数据库、文件操作、计算任务、UI渲染、锁等待、ContentProvider和BroadcastReceiver的不当使用。分析ANR可借助logcat和traces.txt。主线程执行生命周期回调、Service、BroadcastReceiver等,避免主线程耗时操作
377 3
vitepress如何配置右上角的小两侧标志,利用nav标签进行修改,右侧边栏如何设置成自动弹出水平框,让原先隐藏的框能够显示出来
vitepress如何配置右上角的小两侧标志,利用nav标签进行修改,右侧边栏如何设置成自动弹出水平框,让原先隐藏的框能够显示出来
|
设计模式 安全 Java
终于有人将23种设计模式与七大设计原则整理明白了(一)!!!
这篇文章主要介绍23种设计模式以及七大设计原则
终于有人将23种设计模式与七大设计原则整理明白了(一)!!!