ListView嵌入ScrollView问题解决大全

来源:互联网 发布:流程的再造与优化 编辑:程序博客网 时间:2024/04/30 17:51

ListView嵌入ScrollView问题解决大全

引言:

经常遇到这两对冤家的嵌套问题,就寻找出了一些解决方案

方案1

重写ListView(很简单的)

public class ListViewForScrollView extends ListView {    public ListViewForScrollView(Context context) {        super(context);    }    public ListViewForScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public ListViewForScrollView(Context context, AttributeSet attrs,                                 int defStyle) {        super(context, attrs, defStyle);    }    @Override    /**     * 重写该方法,达到使ListView适应ScrollView的效果     */    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                View.MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}

方案2

写一个函数,计算listView实际高度

lv=(ListView)findViewById(R.id.lv);adapter=newMyAdapter();lv.setAdapter(adapter);setListViewHeightBasedOnChildren(lv);
 public void setListViewHeightBasedOnChildren(ListView listView) {        ListAdapter listAdapter = listView.getAdapter();        if (listAdapter == null) {            return;        }        int totalHeight = 0;        for (int i = 0; i < listAdapter.getCount(); i++) {            View listItem = listAdapter.getView(i, null, listView);            listItem.measure(0, 0);            totalHeight += listItem.getMeasuredHeight();        }        ViewGroup.LayoutParams params = listView.getLayoutParams();        params.height = totalHeight + (listView.getDividerHeight() *                (listAdapter.getCount() - 1));        params.height += 5;// if without this statement,the listview will be a                            // little short        listView.setLayoutParams(params);    }

解释:

关键都在与计算listview的高度,第一种在重写listview的measure方法计算高度,第二种写函数计算总高度,再设置给listview!

0 0