欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ScrollView中嵌入ListView只显示一条的解决办法

程序员文章站 2024-03-11 20:40:01
 通常情况下我们不会在scrollview中嵌套listview,但是如果面试官非让我嵌套的话也是可以的。 在scrollview添加一个listview会导致...

 通常情况下我们不会在scrollview中嵌套listview,但是如果面试官非让我嵌套的话也是可以的。

在scrollview添加一个listview会导致listview控件显示不全,通常只会显示一条,究竟是什么原因呢?

两个控件的滚动事件冲突导致。所以需要通过listview中的item数量去计算listview的显示高度,从而使其完整展示,如下提供一个方法供大家参考。

解决办法如下所示:

lv = (listview) findviewbyid(r.id.lv); 
adapter = new myadapter(); 
lv.setadapter(adapter); setlistviewheightbasedonchildren(lv); 
--------------------------------------------------- 
public void setlistviewheightbasedonchildren(listview listview) { 
listadapter listadapter = listview.getadapter(); 
if (listadapter == null) { 
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)); 
params.height += 5; 
listview.setlayoutparams(params); }

现阶段最好的处理的方式是: 自定义listview,重载onmeasure()方法,设置全部显示。

import android.widget.listview; 
/** * * @description: scrollview 中内嵌 listview 的简单实现 
* * @file: scrollviewwithlistview.java 
* * * @version */ 
public class scrollviewwithlistview extends listview { 
public scrollviewwithlistview(android.content.context context, android.util.attributeset attrs) { super(context, attrs); } 
/** 
* integer.max_value >> 2,如果不设置,系统默认设置是显示两条 */ 
public void onmeasure(int widthmeasurespec, int heightmeasurespec) { 
int expandspec = measurespec.makemeasurespec(integer.max_value >> 2, measurespec.at_most); super.onmeasure(widthmeasurespec, expandspec); 
} 
}

以上内容是小编给大家介绍的scrollview中嵌入listview只显示一条的解决办法,希望对大家有所帮助!