欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android ScrollView与ListView冲突解决_ScrollView内嵌套ListView时禁止ListView的滚动

程序员文章站 2022-03-01 15:01:08
...

今天在做项目的时候、遇到一个问题、那就是使用了ScrollView内嵌套ListView

ScrollView内嵌套ListView时不知道为什么ListView高度很小只能显示一行数据

网上有说是因为ScrollView和ListView之间冲突导致的

禁止ListView的滚动事件时可以解决该问题、只让ScrollView可以滚动

解决方法是自定义ListView、xml布局文件中使用该自定义的ListView

public class NotScrollListview extends ListView{
  
	public NoScrollListview(Context context, AttributeSet attrs) {
			super(context, attrs);  
	}  
	  
	//设置不滚动 
	public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
	{  
		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
						MeasureSpec.AT_MOST);  
		super.onMeasure(widthMeasureSpec, expandSpec);  

	}
  
}
重写这个方法之后、这样就可以解决ScrollView内嵌套ListView的冲突了

优点是完全解决了ScrollView嵌套ListView的问题、同时代码较少、你甚至可以直接使用LinearLayout

而在Activity中手动为LinearLayout添加子项控件、不过需要注意的是、在添加前需要调用其removeAllViews的方法

否则可能会出现预想不到的事情、那时你会想念天国的ListView的、缺点不是很明显、但还是有两个

一是使用的不是系统控件、不能在xml布局的Graphical Layout视图中直接看到效果

二是不能向ListView那样可以使用ViewHolder结构、在加载大量子项时会费很多时间在findViewById中

如果你的列表数据比较少的话、不妨试试这个方法

除了不能使用ViewHolder结构、使用方法几乎和ListView一样