Прокрутите в ExpandableListView, развернутом в начале - PullRequest
0 голосов
/ 09 мая 2019

Я хочу прокрутить макет, который содержит ExpandableListView, развернутый в начале.

Я пробую функцию по этой ссылке: https://thedeveloperworldisyours.com/android/expandable-listview-inside-scrollview/#comment-102209 Он работает нормально, но когда я щелкаю по группе, а не когда расширяюсь в начале макета. Я делал некоторые тесты, и высота предметов больше, чем есть на самом деле.

    protected void onResume() {
        super.onResume();
        adapter = new ExpandableDatosPersonalesAdapter(this, expandableListTitle);


        listView.setAdapter(adapter);
        // setOnGroupClickListener listener for group heading click
        listView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                setListViewHeight(parent, groupPosition);
                return false;
            }
        });



       for(int i=0;i<expandableListTitle.size();i++) {
            listView.expandGroup(i);
        }

        setListViewHeight(listView, 4);

    }


    private void setListViewHeight(ExpandableListView listView,
                                    int group) {
        ExpandableListAdapter listAdapter = (ExpandableListAdapter) listView.getExpandableListAdapter();
        int totalHeight = 0;
        //Coge el ancho exacto del movil
        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();

            Timber.e("Altura2: "+totalHeight +" Grupo: "+i);

            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();
                    Timber.e("Altura2: "+totalHeight+" Grupo: "+i+"Hijo: "+j);

                }
            }
        }

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

    }

Хочу, чтобы метод улавливал реальную высоту предметов. Спасибо!

...