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

Set dynamic height for list view which is added programatically in android

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

我已经完成了所有可用的答案,但 none 能够解决我的问题。

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

main.xml

LinearLayout->ScrollView->LinearLayout

现在我根据响应在此线性布局中添加自定义 xml 设计文件,此响应还包含每个部分中的问题数量。 因此,为了管理问题,我在自定义 xml 文件中采用了列表视图。现在我必须以全高显示每个列表视图,所以只有顶部滚动应该工作,没有任何类型的内部滚动。

我已经用通用方法名称 setListViewHeightBasedOnChildren 检查了一些答案,但它不起作用,因为列表视图是动态添加的 运行 时间。

所以请帮助我。

由于子列表的数量是动态的,你最好去图书馆

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

https://github.com/luizgrp/SectionedRecyclerViewAdapter

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

  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();
}