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只显示一条的解决办法,希望对大家有所帮助!