ScrollView嵌套ListView

ScrollView和ListView组合使用时,由于滑动事件冲突导致ListView只显示一条数据。解决方案包括动态设置ListView高度和自定义ListView重写onMeasure()方法。动态设置高度需在设置Adapter后进行,但数据变化时可能不更新。自定义ListView更稳定,首次加载后可通过滚动到顶部保持视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ScrollView控件只能盛放一个直接子控件(通常情况下盛放一个线性布局LinearLayout,且orientation属性为vertical。若ListView在布局中时,ListView的高度设为适应自身内容(wrap_content),却只显示了1条数据。

究其原因,就是ScrollView滑动事件与ListView滑动事件相互冲突,ListView不能正确地计算高度所致。对于这个问题,通常有两个比较合适的解决方案,先分享如下。

解决方案(一):动态设置ListView高度

在.xml布局文件中直接指定ListView的高度,但是ListView中的数据是可变的,其实际高度还需要实际测量。于是我们可以动态地设置ListView的高度。

/**
* 动态地设置ListView的高度
* @param listView
*/
public static void setListViewHeightBasedOnItems(ListView listView) {
    if(listView == null) {
        return;
    }
        
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值