Android Adapter里面嵌套ListView实例详解

发布时间 - 2026-01-11 02:28:12    点击率:

Android Adapter里面嵌套ListView实例详解

前言:

可嵌套~但是显示需要特殊处理下~以下是处理方法

前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView。但刚开始的时候,会发现放入的小ListView会显示不完全,它的高度始终有问题。上网查了下,发现别人也有遇到这样的问题,而大多数人都不推荐这样的设计,因为默认情况下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是无法计算的。

     又搜索了一下,发现有StackOverflow上的牛人已经解决了这个问题,经过试验发现是可以解决问题的,它的思路就是在设置完ListView的Adapter后,根据ListView的子项目重新计算ListView的高度,然后把高度再作为LayoutParams设置给ListView,这样它的高度就正确了,以下是源码: 



public class Utility {  
  public static void setListViewHeightBasedOnChildren(ListView listView) {  
    ListAdapter listAdapter = listView.getAdapter();   
    if (listAdapter == null) {  
      // pre-condition  
      return;  
    }  
  
    int totalHeight = 0;  
    for (int i = 0; i < listAdapter.getCount(); i++) {  
      View listItem = listAdapter.getView(i, null, listView);  
      listItem.measure(0, 0);  
      totalHeight += listItem.getMeasuredHeight();  
    }  
  
    ViewGroup.LayoutParams params = listView.getLayoutParams();  
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
    listView.setLayoutParams(params);  
  }  
}  
 

       只要在设置ListView的Adapter后调用此静态方法即可让ListView正确的显示在其父ListView的ListItem中。但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。

      在ScrollView中嵌套ListView(或者ScrollView)的另外一个问题就是,子ScrollView中无法滑动的(如果它没有显示完全的话),因为滑动事件会被父ScrollView吃掉,如果想要让子ScrollView也可以滑动,只能强行截取滑动事件,有牛人在论坛中发过代码说可以。虽然我没有亲自试过,但估计是可行的。

      虽然在ScrollView中显示ScrollView在技术上的难题可以攻破,但是这样的设计却是非常差的用户体验因为用户会不容易看到和操作子ScrollView中的内容。比如好的设计是,父ListView的每个Item只显示概括性的描述,然后点击其Item会进入另外一个页面来详细描述和展示以及对这个Item的操作。

以上就是对Android Adapter嵌套Listview 的实例详解,本站关于Android 开发的文章还有很多,希望大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # Adapter嵌套ListView  # Adapter  # listview的嵌套  # Android自定义Adapter的ListView的思路及代码  # android开发中ListView与Adapter使用要点介绍  # Android listview与adapter详解及实例代码  # Android开发中ListView自定义adapter的封装  # Android ListView适配器(Adapter)优化方法详解  # Android ListView自定义Adapter实现仿QQ界面  # Android ListView和Adapter数据适配器的简单介绍  # Android UI:ListView - SimpleAdapter实例详解  # Android开发实现ListView和adapter配合显示图片和文字列表功能示例  # 其他的  # 另外一个  # 的是  # 也有  # 都不  # 却是  # 会在  # 这个问题  # 要在  # 要注意  # 希望能  # 不容易  # 希望大家  # 只显示  # 解决问题  # 重写  # 刚开始  # 一个问题  # 在一  # 前几天 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在不使用负向后查找的情况下匹配特定条件前的换行符  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  制作电商网页,电商供应链怎么做?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  如何用搬瓦工VPS快速搭建个人网站?  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel PHP版本要求一览_Laravel各版本环境要求对照  网站制作报价单模板图片,小松挖机官方网站报价?  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  网站制作软件有哪些,制图软件有哪些?  JavaScript如何实现继承_有哪些常用方法  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  创业网站制作流程,创业网站可靠吗?  如何在阿里云部署织梦网站?  详解Android图表 MPAndroidChart折线图  如何在搬瓦工VPS快速搭建网站?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel如何实现API版本控制_Laravel版本化API设计方案  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  个人网站制作流程图片大全,个人网站如何注销?  JS实现鼠标移上去显示图片或微信二维码  如何快速生成凡客建站的专业级图册?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  javascript读取文本节点方法小结  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  如何在香港免费服务器上快速搭建网站?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  大连 网站制作,大连天途有线官网?  linux top下的 minerd 木马清除方法  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  千库网官网入口推荐 千库网设计创意平台入口  如何在IIS中配置站点IP、端口及主机头?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Android GridView 滑动条设置一直显示状态(推荐)