设置列表视图的动态高度,在android中以编程方式添加

时间:2018-01-17 12:04:13

标签: android listview listviewitem

请不要在不理解的情况下将此问题标记为重复。

我已经查看了所有可用的答案,但没有一个能够解决我的问题。

场景:我必须在点击时添加具有展开和折叠功能的部分,这些部分根据API响应是动态的。所以我采用了具有以下树结构的xml文件。

main.xml中

LinearLayout-> ScrollView->的LinearLayout

现在我按照响应在此线性布局中添加自定义xml设计文件,此响应还包含每个部分中的问题数。 因此,为了管理问题,我在自定义xml文件中使用了listview。现在我必须以完整的高度显示每个列表视图,因此只有顶部滚动才能在部分内部进行任何滚动。

我已使用常用方法名称 setListViewHeightBasedOnChildren 检查了一些答案,但由于listview动态添加了运行时间,因此无效。

所以请帮助我。

2 个答案:

答案 0 :(得分:2)

由于子列表的数量是动态的,因此最好通过库

您只需添加一个适配器来维护子列表。它也很容易定制。

https://github.com/luizgrp/SectionedRecyclerViewAdapter

答案 1 :(得分:1)

我已经这样做了,试试这个:

  public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}