ScorllView嵌套ListView时动态设置高度时的问题

17.Android ScrollView嵌套ListView 技巧 == 需求所致 巧妙避免 解决方案一 手动设置ListView高度 解决方案二 一个ListView渲染整个ScrollView内容 解决方案三 自定义LinearLayout取代ListView 解决方案四 自定义拓展ListView 对比总结需求所致现在的需求中,一个简单的列表已经不能满足产品的设计。往往都是在一个View中会有许多控件,ListView又包含在其中。我们都知道,这样的页面肯定是 阅读详情

一、今天遇到了ListView在自适应扩充高度时候出现的问题.
1.网上查的很多,都是说写个Util类,来自扩充Listview的高度.但是,一旦这个Listview是嵌套在ScorllView里的,那么ListView和ScorllView的滑动会冲突.导致Listview只显示一小行.
最初的时候,我是给Listview的Adapter设置了Minheight.但是Item里的文本(TextView一旦多了.)就会导致显示文字不全.
在这里要说明下,要想全部高度显示,textview和父布局文件必须:wrap_content

废话不多说了,上代码了.
网上有很多说明了,但是作为小白,可能不知道怎么做.
一、,就是要重新自定义一个Listview.继承ListView.重写其中的onMeasure方法.

因为ListView扩展时因为很多原因,可能达不到完美的效果.

*在写第三个MyListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}的时候,AS会提示API兼容的问题.*
自动调整下就OK了.

<code class="hljs java has-numbering">
<span class="hljs-keyword">import</span> android.content.Context;
<span class="hljs-keyword">import</span> android.util.AttributeSet;
<span class="hljs-keyword">import</span> android.widget.ListView;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyListView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">ListView</span>{</span>
    <span class="hljs-keyword">public</span> <span class="hljs-title">MyListView</span>(Context context) {
        <span class="hljs-keyword">super</span>(context);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">MyListView</span>(Context context, AttributeSet attrs) {
        <span class="hljs-keyword">super</span>(context, attrs);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">MyListView</span>(Context context, AttributeSet attrs, <span class="hljs-keyword">int</span> defStyleAttr) {
        <span class="hljs-keyword">super</span>(context, attrs, defStyleAttr);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-title">MyListView</span>(Context context, AttributeSet attrs, <span class="hljs-keyword">int</span> defStyleAttr, <span class="hljs-keyword">int</span> defStyleRes) {
        <span class="hljs-keyword">super</span>(context, attrs, defStyleAttr, defStyleRes);
    }

    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onMeasure</span>(<span class="hljs-keyword">int</span> widthMeasureSpec, <span class="hljs-keyword">int</span> heightMeasureSpec) {
        <span class="hljs-keyword">int</span> expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> <span class="hljs-number">2</span>,
                MeasureSpec.AT_MOST);
        <span class="hljs-keyword">super</span>.onMeasure(widthMeasureSpec, expandSpec);
    }
}
</code>

这是在ListViewUtil里写的方法.

<code class="hljs java has-numbering"> <span class="hljs-javadoc">/**
     * 动态设置ListView的高度
     *
     *<span class="hljs-javadoctag"> @param</span> listView
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setListViewHeightBasedOnChildren</span>(ListView listView, ListAdapter adapter) {
        <span class="hljs-keyword">if</span> (listView == <span class="hljs-keyword">null</span>) <span class="hljs-keyword">return</span>;
        <span class="hljs-keyword">if</span> (adapter == <span class="hljs-keyword">null</span>) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">int</span> totalHeight = <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < adapter.getCount(); i++) {
            View listItem = adapter.getView(i, <span class="hljs-keyword">null</span>, listView);
            listItem.measure(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>);<span class="hljs-comment">//计算每项   Item的高度</span>
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - <span class="hljs-number">1</span>));
        <span class="hljs-comment">//循环完之后,要计算出getDividerHeight(空白处占得height)   才是Listview的高度</span>
        listView.setLayoutParams(params);

    }</code>

然后是最后一步:
一定要在获取数据后:

<code class="hljs cs has-numbering"> adapter = <span class="hljs-keyword">new</span> MyListAdapter(<span class="hljs-keyword">this</span>, CommentmData);
            mListView.setAdapter(adapter);
  ListViewUtil.setListViewHeightBasedOnChildren(mListView, adapter);</code>

还可能牵扯到更新Adapter后的数据变动,也要调用该方法.

<code class="hljs java has-numbering">ListViewUtil.setListViewHeightBasedOnChildren(mListView, adapter);
<span class="hljs-javadoc">mListView 就是你布局里那个Listview
adapter就是适配Listview的Adapter</span></code>
动态设置ListView高度,解决跟ScrollView嵌套冲突 ScrollView中嵌套ListView,只显示一条数据,采用动态设置ListView高度来解决ListView和ScrollView的冲突问题。 阅读详情

相关推荐

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing

写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没

weixin_47287635的博客 525

scroolView嵌套listview时listView只显示一条item的高,并且还能滑动问题

至于scroolView和listView的嵌套解决,网上很多方法。但我在开发中遇到了个很奇怪的问题,listView只显示一个item的高度,并且还能滑动。         解决:                   一:自定义MyListView时,heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.

鲁西南小辉的博客 525

CST仿真提速秘籍:用好Local Mesh,别再让简单结构拖慢你的仿真速度

本文深入探讨了CST仿真中Local Mesh技术的应用,通过区域加密与全局排除策略,显著提升电磁仿真效率。针对5G天线阵列、微波滤波器等多尺度结构模型,提供了网格划分的黄金法则和实战技巧,帮助工程师优化仿真速度与精度,特别适用于电磁仿真和网格设置场景。

weixin_27134495的博客 406

ListView 动态设置高度问题

今天开发遇到一个问题,就是当动态插入ListView数据的时候,由于之前ListView的高度已经固定死了,所以显示不完整的数据,并且底部显示黑边。如图: 而我希望这个ListView可以动态的改变高度: 当时第一个想到的解决办法就是在setAdapter之后去重新修改ListView的高度,但是发现设置match_parent或wrap_content没有效果,只能设置一

编程是一门艺术 4万+

C#实战:手把手教你用SerialPort实现RS485 ModbusRTU通信(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现RS485 ModbusRTU通信,包括硬件准备、串口配置、数据收发核心逻辑及高级通信技巧。通过实战案例和完整代码,帮助开发者快速掌握工业级通信框架的构建方法,提升设备间通信的稳定性和效率。

weixin_29207533的博客 255

QWEN 2.5模型结构解析与代码解读

对Qwen2.5大模型的代码进行研究

4362

Android在ScrollView中嵌套ListView,ListView高度设置问题

项目中需要在ScrollView中套个ListView,ListView的Item是动态添加的,故高度也需要动态设置,在网上找了一天,发现文章出处都是在http://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing ,网上中文转载,基本都是引用如下

攻城狮Luke 1114

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350

Android中Listview通过适配器设置Item的高度及其他样式

一、前提:需要通过适配器设置ListView的相关样式,并定义一个辅助文件listviewitemstyle.xml: 以下为java中相关代码: listView = (ListView)findViewById(R.id.lstvSubj); //result即要加载的List ListAdapter adapter = new ArrayAdapter(HomeActivity1.t

berber78的专栏 2万+

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4084

2022中山大学计算机技术专硕考研初试、复试经验帖

个人简介 推荐几个我自己感觉对考研非常有帮助的小助手吧。可以帮助节省时间! 考研时间规划总览 初试篇 数学 英语 政治 408 复试篇 机试 笔试 面试 关于选导师 个人感言

zik的博客 1万+

ScorllView嵌套ListView时,动态设置ListView高度时的问题.

作为开发的小牛犊.我只是想记录下自己开发中遇到的问题,已经解决办法!—留给自己看就行了.一、今天遇到了ListView在自适应扩充高度时候出现的问题. 1.网上查的很多,都是说写个Util类,来自扩充Listview的高度.但是,一旦这个Listview是嵌套在ScorllView里的,那么ListView和ScorllView的滑动会冲突.导致Listview只显示一小行.

a940320099的博客 777

有趣的方式学习DDR5(4)—— DDR5 SDRAM 启动与初始化过程全攻略

🟢。

weixin_43199439的博客 1623

安卓开发之ScrollView嵌套ListView的一些问题和解决

在应用开发中,有一些情况需要在ScrollView中嵌套一个或多个ListView来实现,下面主要讨论一些嵌套过程中的问题和一些解决方案。 一、ListView的高度不能完全展开这种情况是当ScrollView嵌套ListView时,ListView的高度设置为wrap_content时会产生,一般情况下ListView只显示的第一个Item。正常情况下,高度设置为“wrap_content”的Li

cxmscb的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ScorllView 嵌套gridView,listView问题处理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33941350的博客 127

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

解决:ScrollView中嵌套ListView 使得listview上下滑动卡顿现象

效果图就是上面的那样!实现方式:上面是一个ViewPager实现的左右无限循环并带有自动轮播的banner。在banner图的下面是一个listview实现上拉加载的功能;但是在我实现的过程中我遇到了一个问题,就是整个页面的展示效果都已经实现,但是banner图连带下面的listview在上下滑动的时候出现卡顿的现象;当然之前也遇到了一个问题,就是我的banner图和listview一起放在了父控

huihui_go2014的博客 1151

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

解决ScrollView中嵌套ListView或RecycleView卡顿问题

解决问题: 只要是listview上下滑动卡顿,其主要原因是因为在listview填充适配器的时候。在重写的类BaseAdapter方法getView();被无限的循环的调用;这样消耗了大量的内存导致listview上下滑动的时候,出现了卡顿。原因就在于measure过程,ListView一般都会根据屏幕加载多个Item,而且也会同时显示这些已经加载过的若干组Item,而这些Item的父元素...

zhelong111的专栏 468

Android ListView和ScorllView

activity_main.xml ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> com.gjl.day04_listview_scrollview.MyListView android:id="@+id/listview" a

Gybk123的博客 404

Android 在ScorllView中ListView和GridView冲突解决方案

首先要说的一点就是,ListView跟GridView是一个用法差不多,解决方法也差不多,这个相信大家都明白,我就不多解释啦。 但是我要强调一点的是**ScorllView包裹内容只能是一个,如果想要包裹多个控件的话,你可以放在一个LinearLayout或者RelativeLayout中就哦了,这样问题就解决啦**在这里我就介绍一下我遇到的俩个问题吧(在这里我就以ListView为例吧,Gri

Hank铄 1155

ListView在代码中动态设置高度

让ListView高度最大 完全显示

sun985757454的博客 4834

安卓ListView根据Adapter动态设置高度

安卓ListView根据Adapter动态设置高度

junjle的专栏 3320

GPS实时定位、获取基站信息

好久没有来更新我的博客了 , 最近刚做了一个GPS实时定位和获取基站信息的一个小的Demo ,这个辛酸泪啊~ 来给大家们来分享一下 ! 做这个项目我用的是用的原始的手机GPS定位, 因为这个有可能需要在国外会用到,如果用国内第三方SDK的是用不了的,国外的第三方SDK的也需要翻墙什么的......不过用原始的还不错精确度还可以。 (网上的资料质量太水了)下面给大家一些官方资料 :

梁少腾的博客 8215

PendingIntent和AlarmManager--------启动定时任务及详解

pendingintent使用的三种情况 你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象, 可以通过getService(Context context, int requestCode, I

梁少腾的博客 2034

MediaPlayer主要属性

主要涉及类:MediaPlayer (1) 当一个MediaPlayer对象被创建或者调用reset()方法之后,它处于空闲状态,调用release()方法后处于结束状态 1,一个MediaPlayer对象调用了reset()方法后,再调用其它方法可能会触发OnErrorListener.onError()事件,未调用reset()方法则不会触发 2,当Mediaplayer对象不再被使用时,最好

梁少腾的博客 1462
上一篇: SlidingMenu 侧滑
下一篇: 计时器
有志青年L
博客等级 码龄10年 30粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值