`

Android学习 之 问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案

阅读更多

参考自:http://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing/3495908#3495908

 

利用下面这个Utility 类的静态方法setListViewHeightBasedOnChildren()即可实现:

 

 

 

在listview.setAdapter()之后调用Utility.setListViewHeightBasedOnChilren(listview)就Okay 了。
public class Utility {
public static void setListViewHeightBasedOnChildren(ListView listView) {
//获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter(); 
if (listAdapter == null) {
// pre-condition
return;
}

int totalHeight = 0;
for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); //计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
//listView.getDividerHeight()获取子项间分隔符占用的高度
//params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
}

 

其实原理就是动态的改变ListView控件的高度。

分享到:
评论
12 楼 xinqiqi123 2015-11-25  
在item布局中要是引用到自定的东西,item就会显示不全
11 楼 anlins 2013-05-30  
还有个这个方法有个缺点,就是当listview中的view空间内容有换行时就不适用了。。。但是不知道需要修改那些东西。一直纠结中。。。需找答案。。。
10 楼 anlins 2013-05-30  
linearlayout重写了onmeasure方法,其他的布局文件没有重写onmeasure,所以在调用listItem.measure(0, 0); 会报空指针异常,如果想用这个东东,就必须用linearlayout布局喽。
9 楼 yahier 2012-04-05  
learner576539763 写道
真的是空指针。。。。。 打上log 显示所需的对象都得到了 但就是提示listItem.measure(0, 0);处有空  楼主 能给指点下吗


我也遇到 我的解决办法是将 listview的item的布局从relativelayout 改成linearlayout 不过我也不知道原理
8 楼 learner576539763 2012-03-06  
真的是空指针。。。。。 打上log 显示所需的对象都得到了 但就是提示listItem.measure(0, 0);处有空  楼主 能给指点下吗
7 楼 ldci3gandroid 2011-11-29  
zx1326687 写道
很奇怪,我一直在listItem.measure(0, 0); //计算子项View 的宽高  这里出错,都是报空指针异常,这是什么问题?!



空指针错误很好查的 肯定是哪个对象为null 请仔细检查一遍
6 楼 ldci3gandroid 2011-11-29  
yunlike1986 写道
我调用这个方法测量的ListView每一项的高度都是58,雷打不动,不知道是什么原因导致的

雷打不动的 那肯定是代码问题了 建议你好好检查一下
5 楼 zx1326687 2011-11-17  
很奇怪,我一直在listItem.measure(0, 0); //计算子项View 的宽高  这里出错,都是报空指针异常,这是什么问题?!
4 楼 yunlike1986 2011-10-27  
我调用这个方法测量的ListView每一项的高度都是58,雷打不动,不知道是什么原因导致的
3 楼 ldci3gandroid 2011-10-21  
androidHome 写道
兄台请问listView本身需要设置哪些属性?我也遇到和你同样的问题,引用上面这个工具类设置高度以后发现并没有起到什么效果,不知道是不是我代码里面还缺些什么设置,多谢多谢!


应该是你没设置对,你可以把问题描述的清楚些吗 呵呵
2 楼 androidHome 2011-10-19  
哦,补充一下,我这没有给ListView写xml布局文件,只是给其中的listview item写了xml布局文件。
1 楼 androidHome 2011-10-19  
兄台请问listView本身需要设置哪些属性?我也遇到和你同样的问题,引用上面这个工具类设置高度以后发现并没有起到什么效果,不知道是不是我代码里面还缺些什么设置,多谢多谢!

相关推荐

    解决Scrollview嵌套listview下拉刷新的一些问题

    当在一个ScrollView中嵌套一个ListView时,可能会遇到一些特定的问题,尤其是在实现下拉刷新功能时。本文将深入探讨这些问题及其解决方案。 ### 问题1:滑动冲突 由于ScrollView和ListView都具有滚动功能,它们之间...

    Android ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

    然而,由于ScrollView自身并不支持滚动事件的监听,因此当我们在ScrollView中嵌套可滚动的组件如ListView或GridView时,可能会遇到滚动冲突问题。为了解决这个问题,开发者需要手动处理滚动事件,或者选择使用如...

    【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView

    【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView 博客:http://blog.csdn.net/zxt0601/article/details/52494665

    ScrollView中嵌套ListView的例子

    问题在于,当ListView被放在ScrollView中时,由于ListView自身已经具备了滚动功能,这可能导致ScrollView无法正确检测到ListView的滚动事件,进而使得整个嵌套结构的滚动变得混乱。用户可能无法滚动到ScrollView的...

    ScrollView中嵌套Listview(两个)

    本文将深入探讨如何解决ScrollView中嵌套两个ListView不显示的问题。 首先,我们需要理解为何会出现这样的问题。ScrollView设计的初衷是允许其内部的单一视图进行垂直滚动。而ListView已经实现了自身的滚动机制,...

    解决scrollview嵌套listview的冲突问题

    用于解决scrollview组件嵌套listview组件时候 两者之间的冲突问题

    Android中自定义ListView,解决scrollview嵌套listview 滑动事件冲突

    在Android开发中,ListView是用于显示大量数据列表的常用组件,而ScrollView则是一个可以垂直滚动的视图容器,常用于包含多个子视图。当在一个ScrollView内嵌套一个ListView时,由于两者都具有滑动功能,可能会导致...

    ScrollView嵌套ListView,解决显示不全的问题

    当在一个ScrollView内嵌套一个ListView时,可能会遇到显示不全的问题,这通常是由于两者都具有滚动功能而产生的冲突。下面将详细解释这个问题,并提供解决方案。 首先,我们需要理解ScrollView和ListView的工作原理...

    解决scrollview嵌套listview显示不全的四种方法

    当ScrollView嵌套ListView时,可能会遇到显示不全的问题,即ListView的内容无法完全显示,只能看到一部分。这个问题主要是由于两个可滚动视图的冲突造成的。本文将详细探讨解决这一问题的四种方法。 ### 方法一:...

    Scrollview中嵌套listview,listview中再嵌套listview

    在Android开发中,有时我们需要构建复杂的用户界面,这时可能会涉及到ScrollView与ListView的嵌套使用,甚至在ListView中再嵌套ListView。这样的布局设计虽然能够满足多样化的显示需求,但同时也带来了一些挑战,如...

    解决ScrollView嵌套ListView Demo

    在Android开发中,ScrollView和ListView是两种常用的布局组件。ScrollView是一个可以滚动的视图容器,它允许其内容超出屏幕大小。而ListView则用于显示一列可滚动的项目,通常用于展示大量的数据。当在一个布局中...

    经典ScrollView嵌套ListView和ScrollView

    很多朋友因项目需求问题需要在ScrollView中嵌套使用ListView或ScrollView 但是彼此的滑动事件会发生冲突,网上大多数都是计算ListView的高度来解决这个问题,但个人亲手尝试 结果ListView的Item要是过多的话ListView...

    ScrollView中嵌套listview

    在Android开发中,ScrollView通常用于实现可滚动的内容区域,而ListView则是一个用于显示大量数据的视图组件,它能够自动管理子视图并实现滚动。然而,当ScrollView和ListView同时存在,即“ScrollView中嵌套...

    ScrollView嵌套listview或gridview

    当ScrollView中嵌套ListView或者GrideView时,listView和GrideView不能完全显示的时候

    ScrollView不冲突嵌套ListView

    本篇文章将深入探讨如何解决ScrollView与ListView的嵌套问题,并通过自定义ListView来实现正常显示每个Item,确保滑动操作由ScrollView有效控制。 首先,我们需要理解ScrollView和ListView的工作原理。ScrollView是...

    scrollview嵌套listview冲突解决

    当在一个ScrollView中嵌套一个ListView时,可能会遇到一些问题,比如ListView显示不全或者只显示一个条目。这些问题通常由于两者的滚动机制冲突导致,因为两者都具有滚动功能,系统可能无法正确处理它们之间的交互。...

    解决Android中ListView和ScrollView嵌套冲突

    然而,当ListView被放置在ScrollView内时,两者之间的嵌套冲突问题就会显现出来。这种冲突主要体现在ListView无法正确地展示其内容,因为ScrollView会尝试将所有子视图(包括ListView)都放入屏幕可见范围内,导致...

    四种方法解决ScrollView嵌套Listview

    在Android开发中,ScrollView和ListView的嵌套是一个常见的需求,但也是一个挑战,因为它们都是滚动视图,直接组合可能导致冲突和不可预期的行为。本篇文章将详细介绍四种解决ScrollView嵌套ListView问题的方法,...

    Android解决ListView嵌套ScrollView不能刷新

    总的来说,解决Android中ListView嵌套ScrollView不能刷新的问题需要理解Android的滚动机制,合理选择或定制组件,以及优化布局设计。通过实践和学习,开发者可以克服这个挑战,实现流畅的用户界面。

    ScrollView嵌套ListView刷新

    首先,我们要理解为什么ScrollView和ListView不建议直接嵌套。主要原因是性能问题。ListView通过复用已创建的列表项(ViewHolder机制)来优化滚动性能,而ScrollView没有这个机制。当两者嵌套,ListView的优化效果被...

Global site tag (gtag.js) - Google Analytics