解决ListView 跟ScroolView 共存 listItem.measure(0, 0) 空指针

本文介绍了一种解决ListView和ScrollView共存时出现的空指针异常问题的方法。通过调整ListView的高度并使用LinearLayout替代RelativeLayout作为item布局,有效避免了异常。

解决ListView 和ScroolView 共存 listItem.measure(0, 0) 空指针,在网上找到ListView 和ScroolView 共存的方法无非是给他每个listview 重新增加高度,但是android 的设计者始终认为这并不是一种好的实现方法。但是有的时候有必须要用这种蛋疼的设计。

于是乎,我网上找到了一个方法:

<span style="white-space:pre">		</span>/**
<span style="white-space:pre">	</span>     * 设置重新设置Listview的高度
<span style="white-space:pre">	</span>     */ 
<span style="white-space:pre">	</span>    public void setListViewHeight(ListView listView) {  
<span style="white-space:pre">	</span>        ListAdapter listAdapter = listView.getAdapter();   
<span style="white-space:pre">	</span>        if(listAdapter == null) {  
<span style="white-space:pre">	</span>            return;  
<span style="white-space:pre">	</span>        }  
<span style="white-space:pre">	</span>        int totalHeight = 0;  
<span style="white-space:pre">	</span>        for (int i = 0; i < listAdapter.getCount(); i++) {  
<span style="white-space:pre">	</span>            View listItem = listAdapter.getView(i, null, listView);  
<span style="white-space:pre">	</span>            listItem.measure(0, 0);  
<span style="white-space:pre">	</span>            totalHeight += listItem.getMeasuredHeight();  
<span style="white-space:pre">	</span>        }  
<span style="white-space:pre">	</span>        ViewGroup.LayoutParams params = listView.getLayoutParams();  
<span style="white-space:pre">	</span>        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
<span style="white-space:pre">	</span>        listView.setLayoutParams(params); 
<span style="white-space:pre">	</span>    }<span style="white-space:pre">		</span>/**

但是我每次调用的时候都会产生在listItem.measure(0,0)报空指针异常。我debug 发现listItem 并不是为空啊,为啥会报错。在经过一番查找之后。我发现原来是自己item的布局用了RelativeLayout 把他换为LinearLayout 就好了。究其原因,原来是 Linearlayout重写了onmeasure方法,其他的布局文件没有重写onmeasure,所以在调用listItem.measure(0, 0); 会报空指针异常,如果想用这个东东,就必须用linearlayout布局喽。

在VB6中向`ListView`控件添加列表项涉及几个关键步骤,包括初始化控件、定义列头以及添加数据项。以下是一个完整的示例,展示如何在VB6中动态地向`ListView`控件添加列表项。 ### 初始化 ListView 控件 在向`ListView`控件添加项之前,需要确保控件已经正确初始化,并且设置了适当的视图模式(如`Details`、`List`、`SmallIcon`或`LargeIcon`)。如果使用的是`Details`视图,则还需要定义列头。 ```vb ' 设置 ListView 的视图模式为 Details ListView1.View = lvwReport ' 添加列头 ListView1.ColumnHeaders.Add , , "Name", 1500 ListView1.ColumnHeaders.Add , , "Age", 800 ``` ### 添加列表项 在VB6中,`ListView`控件使用`ListItems`集合来存储项。每个`ListItem`对象可以包含多个子项(`SubItems`),这些子项对应于不同的列。 ```vb Dim item As ListItem ' 添加一个新的列表项 Set item = ListView1.ListItems.Add(, , "John Doe") ' 添加子项(对应第二列和第三列) item.SubItems(1) = "30" item.SubItems(2) = "Engineer" ``` ### 完整示例 以下是一个完整的代码示例,展示了如何在VB6中创建一个带有列头的`ListView`控件,并向其中添加多个列表项。 ```vb Private Sub Form_Load() ' 设置 ListView 的视图模式为 Details ListView1.View = lvwReport ' 添加列头 ListView1.ColumnHeaders.Add , , "Name", 1500 ListView1.ColumnHeaders.Add , , "Age", 800 ListView1.ColumnHeaders.Add , , "Occupation", 1500 ' 添加列表项 AddListItem "John Doe", "30", "Engineer" AddListItem "Jane Smith", "25", "Designer" AddListItem "Alice Johnson", "28", "Manager" End Sub Private Sub AddListItem(name As String, age As String, occupation As String) Dim item As ListItem Set item = ListView1.ListItems.Add(, , name) item.SubItems(1) = age item.SubItems(2) = occupation End Sub ``` ### 注意事项 - 确保在项目中正确引用了`Microsoft Windows Common Controls`库,以便使用`ListView`控件。 - 如果未设置`View`属性为`lvwReport`,则无法看到列头和子项。 - 列宽的单位是缇(twip),1缇等于1/1440英寸[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值