首页 > 其他 > 详细

解决各种Scroll嵌套listview

时间:2014-04-14 16:51:42      阅读:634      评论:0      收藏:0      [点我收藏+]

在开发Android时,有时会出现ScrollView嵌套ListView的情况,第一次遇到这个问题的时候,大家都会觉得很头疼;然后会去网上找解决方案,最常见的一种解决方案就是动态的计算ListView的高度,然后再代码中重设其高度;解决方法如下:

/**
	 * 设置listview的高度。解决listview嵌套listview的时候,无法完整显示里边listview的高度问题。
	 * 使用条件:item必须为LinearLayout
	 * 用法:在setAdapter之后调用。
	 * @param listView 需要被计算高度的listview(子listview)
	 */
	public static 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);
            if(listItem != null)
            	listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
但是这个方法是有局限性的,使用条件在注释中有写,item必须为LinearLayout;其实如果认真看了这个代码应该能发现另外一个局限,动态计算ListView的高度实际上是计算了一个item的高度,然后再乘以count,再加上divider的高度;问题是,如果item的高度不一致怎么办,ListView的item不一致这个情况很常见的,像QQ空间动态界面等。

这个时候有另一种很好的解决方案,而且代码量很少,目前没有发现什么局限;这种方法重写了LIstView的onMeasure方法,实现了ScrollView嵌套ListView正常显示;代码如下:

public class InScrollListView extends ListView {

	public InScrollListView(Context context) {
		super(context);
	}

	public InScrollListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public InScrollListView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	@Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {      
        int expandSpec = MeasureSpec.makeMeasureSpec( 
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
        super.onMeasure(widthMeasureSpec, expandSpec); 
    } 

}



解决各种Scroll嵌套listview,布布扣,bubuko.com

解决各种Scroll嵌套listview

原文:http://blog.csdn.net/sweetvvck/article/details/23666583

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!