天天看点

ScrollView嵌套ListView冲突的最简洁解决方案

我们在做项目的时候,常常会遇到ScrollView嵌套ListView(或GirdView)的问题,然而嵌套在 ScrollView的 ListVew(或GirdView)会数据显示不全,那么我们有什么好的方法来解决这个问题呢?

下面给大家带来的一个解决方法是本人自己用的,感觉特别简洁,好用。

话不多说,上菜!

自定义一个ListView

/**
 *默认显示的首项是ListView,需要手动把ScrollView滚动至最顶端。
 *举例如下:
 *mScrollView = (ScrollView) findViewById(R.id.mScrollView);
 *mScrollView.smoothScrollTo(0, 0);
 *@author 树根
 *
 */
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 = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
				MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, expandSpec);
	}
}
           

然后在你的布局文件里把需要嵌套在ScrollView的ListView都用这个自定义的ListView就可以了。

注意:打开嵌套ListVew的 ScrollView的页面布局 默认 起始位置不是最顶部

解决方法一:在代码里加这句就ok了 

mScrollView.smoothScrollTo(0, 0);
           

解决方法二:把套在里面的Gridview 或者 ListVew 不让获取焦点即可。

gridview.setFocusable(false); listview.setFocusable(false);

注意:在xml布局里面设置android:focusable=“false”不生效

(更新:有朋友说这种方法不太好用,所以还是建议大家用第一种吧,我一直都是用第一种,嘿嘿)

是不是灰常简单嘞?so easy! 妈妈再也不用担心我的学习了

当然网上还有其他解决方法,大家有兴趣的可以看看,不过相对于其他方法,这个方法真的是简洁,实用!简洁,实用!简洁,实用!

继续阅读