Disable scrolling of a ListView contained within a ScrollView

前端 未结 7 1005
迷失自我
迷失自我 2020-12-01 11:46

I want to show a Profile screen for my users.

It must have three views (2 Buttons and a ImageView) and a ListView to show the

7条回答
  •  春和景丽
    2020-12-01 12:17

    I found a very simple solution for this. Just get the adapter of the listview and calculate its size when all items are shown. The advantage is that this solution also works inside a ScrollView.

    Example:

    public static void justifyListViewHeightBasedOnChildren (ListView listView) {
    
        ListAdapter adapter = listView.getAdapter();
    
        if (adapter == null) {
            return;
        }
        ViewGroup vg = listView;
        int totalHeight = 0;
        for (int i = 0; i < adapter.getCount(); i++) {
            View listItem = adapter.getView(i, null, vg);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
    
        ViewGroup.LayoutParams par = listView.getLayoutParams();
        par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
        listView.setLayoutParams(par);
        listView.requestLayout();
    }
    

    Call this function passing over your ListView object:

    justifyListViewHeightBasedOnChildren(myListview);
    

    The function shown above is a modidication of a post in: Disable scrolling in listview

    Please note to call this function after you have set the adapter to the listview. If the size of entries in the adapter has changed, you need to call this function as well.

提交回复
热议问题