带有ArrayAdapter的ListView只显示高度wrap_content的1项

时间:2015-03-24 10:33:16

标签: android android-layout listview android-listview android-arrayadapter

我遇到的问题是我的ListView只显示一行,即使包含数据的ArrayList中有2个项目。

  

为了澄清,,我在ScrollView中使用ListView但是为了平衡它我使用自定义ExpandableHeightListView(从SO上的一个答案中检索),这是对于这个目的很有用。 此ListView不可滚动。它有固定的高度。

此外,在同一个ScrollView中,其他一些ListView工作正常,但这一个ListView无法正常工作。

更进一步,当我在getView()方法中记录位置变量值时,对于此ListView,它始终为0,而​​对于其他ListView,它按顺序递增。 / p>

我已经比较了两个Adapter的代码并且它们是相同的但仍然是当前的ListView无效。

我尝试重写getView()方法,但无济于事。

任何帮助表示感谢。

修改

如果我给ListView提供固定高度,如250dp,则两行都会显示,但只显示1行,其中高度设置为wrap_content

4 个答案:

答案 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);
        }
    }
);