我遇到的问题是我的ListView只显示一行,即使包含数据的ArrayList中有2个项目。
为了澄清,是,我在ScrollView中使用ListView但是为了平衡它我使用自定义ExpandableHeightListView(从SO上的一个答案中检索),这是对于这个目的很有用。 此ListView不可滚动。它有固定的高度。
此外,在同一个ScrollView中,其他一些ListView工作正常,但这一个ListView无法正常工作。
更进一步,当我在getView()方法中记录位置变量值时,对于此ListView,它始终为0,而对于其他ListView,它按顺序递增。 / p>
我已经比较了两个Adapter的代码并且它们是相同的但仍然是当前的ListView无效。
我尝试重写getView()方法,但无济于事。
任何帮助表示感谢。
如果我给ListView提供固定高度,如250dp,则两行都会显示,但只显示1行,其中高度设置为wrap_content
答案 0 :(得分:6)
这是一个非常常见的问题,要解决此问题,您应该阅读并实施This WorkAround and Solution。
在我的情况下,它完美地工作。你也应该尝试一下。
答案 1 :(得分:1)
据我所知,scrollView中的ListView无法正常工作。
因为两个小部件都有滚动因此它们无法正常工作。
所以我建议删除ScrollView
谢谢..
答案 2 :(得分:1)
我知道这不是你想听到的,但严肃地说,不管你是什么编程,考虑在标签或类似的地方显示它,这样你就不需要滚动视图了。
如果您确实需要在一个屏幕上拥有如此多的数据,请考虑使用带有适配器的LinearLayout
之类的内容来显示您的数据。
Listviews不适用于在scrollview中工作,因为它们本身可以滚动。你可以“破解”你的方式,但它并不好。如果您确实需要listviews提供的功能,请考虑将屏幕拆分为选项卡,在每个选项卡中显示一个或两个列表视图。
答案 3 :(得分:0)
这个解决方案对我有用,也可以自动调整布局。在顶级ListView适配器上,在getView()方法内,您将创建一个引用另一个ListView的布局的视图。假设"内部" ListView被声明为" listView"使用名为" adapter"的适配器,尝试使用下面的代码。另外,确保内部ListView布局设置为WRAP_CONTENT,这样即使高度正确,也不会被布局约束覆盖。
listView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
listView.getLayoutParams().height = adapter.getCount() * {whatever your list item height is} OR do something else to add up all of the heights;
listView.requestLayout();
listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
);