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

设置列表视图的动态高度,该视图在android中以编程方式添加,android,listview,listviewitem,Android,Listview,Listviewitem,未经理解,请不要将此问题标记为重复。 我已经阅读了所有可用的答案,但没有一个能够解决我的问题。 场景:我必须添加具有单击展开和折叠功能的部分,这些部分根据API响应是动态的。所以我采用了树下结构的xml文件 main.xml 线性布局->滚动视图->线性布局 现在,我将根据响应在这个线性布局中添加自定义xml设计文件,并且该响应在每个部分中包含大量问题。 为了管理问题,我在自定义xml文件中使用了listview。现在,我必须显示每个完整高度的listview,所以只有顶部的滚动条可以工作,而在

未经理解,请不要将此问题标记为重复。

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

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

main.xml

线性布局->滚动视图->线性布局

现在,我将根据响应在这个线性布局中添加自定义xml设计文件,并且该响应在每个部分中包含大量问题。 为了管理问题,我在自定义xml文件中使用了listview。现在,我必须显示每个完整高度的listview,所以只有顶部的滚动条可以工作,而在部分内部没有任何类型的滚动条

我已经检查了一些常用方法名为setListViewHeightBasedOnChildren的答案,但它不起作用,因为listview是在运行时动态添加的


因此,请帮我解决这个问题。

由于子列表的数量是动态的,您最好浏览一下库

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


我已完成此操作,请尝试以下操作:

  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();
}
public static void setListViewHeightBasedOnChildren(ListView ListView){
ListAdapter ListAdapter=listView.getAdapter();
如果(listAdapter==null){
//前提条件
返回;
}
int totalHeight=0;
int desiredWidth=MeasureSpec.makeMeasureSpec(listView.getWidth(),最多测量一次);
对于(int i=0;i
常用方法名称setListViewHeightBasedOnChildren。。。呵呵,这太糟糕了,它让谷歌的一名工程师(负责ListView)觉得很糟糕。我不是这么说的,但在堆栈溢出中,当我搜索时,我只会在每个答案中得到同名的解决方案。你可以检查NestedScrollView是否有帮助。。。如果没有,将一个ScrollView放在另一个ScrollView中没有正确的解决方案,我已经检查过了,但这里的值是从web API绑定的运行时,同时它在父视图中添加视图,所以它无法计算每个视图的实际高度,即使我使用相对或线性布局(而不是列表视图)进行了检查,但没有成功。。所以请不要在动态添加了动态数据的listview上否决这样的投票问题,这一个不起作用