在初始生命周期中计算ExpandableListView高度

时间:2016-05-04 12:39:51

标签: android listview scrollview

我遇到的问题源于Android在嵌套滚动元素方面存在某些困难。

我有一个ScrollView,它在其下方托管一个水平的RecyclerView和一个ExpandableListView。 我遇到的问题是ScrollView没有滚动。

我通过以下方式修复:  1.将固定高度设置为RecyclerView。  2.在每个组项单击时计算ExpandableListView高度。  像这样:

expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                setListViewHeight(parent, groupPosition);
                return false;
            }
        });

private void setListViewHeight(ExpandableListView listView, int group) {
        ExpandableListAdapter listAdapter = (ExpandableListAdapter) listView.getExpandableListAdapter();
        int totalHeight = 0;
        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),View.MeasureSpec.EXACTLY);
        for (int i = 0; i < listAdapter.getGroupCount(); i++) {
            View groupItem = listAdapter.getGroupView(i, false, null, listView);
            groupItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);

            totalHeight += groupItem.getMeasuredHeight();

            if (((listView.isGroupExpanded(i)) && (i != group)) || ((!listView.isGroupExpanded(i)) && (i == group)))
            {
                for (int j = 0; j < listAdapter.getChildrenCount(i); j++)
                {
                    View listItem = listAdapter.getChildView(i, j, false, null,listView);
                    listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
                    totalHeight += listItem.getMeasuredHeight();
                }
            }
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        int height = totalHeight + (listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
        if (height < 10)
            height = 200;
        params.height = height;
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

问题: 因为我只在组项目点击时计算列表视图高度,当我打开片段时直到我点击一个组项目,ScrollView不起作用。 我发现在onCreateView中计算ExpandableListView适配器的高度是有问题的,因为它在那时仍然是空的。

任何想法都会被贬低。

1 个答案:

答案 0 :(得分:1)

如果您需要等到视图布局完毕,您可以使用 一个ViewTreeObserver。例如:

  val DF3 = DF1.filter(DF1("serial_nm") === DF2("ser_nm"))