面试题-ScrollView中嵌入ListView常见问题和解决
问题:
ScrollView内部嵌套的ListView,数据显示不完整。
原因:
ScrollView的滑动事件的消费处理以及ListView控件的高度设定问题
解决方案:
第一种解决方案:手动动态设置ListView高度:
该方法缺陷:
-
Adapter中getView方法返回的View的必须由LinearLayout组成,如果使用其他的布局如RelativeLayout,在调用listItem.measure(0, 0);时就会抛异常
-
把整个需要放在ScrollView中的内容,统统放在ListView中,原ListView上方的数据和下方数据,都作为现ListView的一个itemView,和原ListView中的单条数据是平级的关系。
一个单独的ListView就可以了
第二种解决方案:使用LinearLayout取代ListView
我们只需要自定义一个类继承自LinearLayout,为其加上对BaseAdapter的适配
第三种方案:自定义可适应ScrollView的ListView
自定义一个类继承自ListView,通过重写其onMeasure方法,达到对ScrollView适配的效果
三种方案的优缺点比较:
方案一:
优点:是不用对使用的控件做任何修改,只需要使用一个现成的方法就好了。
缺点:最大的限制是ListView的item只能由LinearLayout这一个布局组成,对于一些复杂的布局就不适用了
方案二:
优点:是完全解决了ScrollView嵌套ListView的问题,同时代码较少,你甚至可以直接使用LinearLayout,而在Activity中手动为LinearLayout添加子项控件,不过需要注意的是,在添加前需要调用其removeAllViews的方法,否则会抛出异常。
缺点:不能向ListView那样可以使用ViewHolder结构,在加载大量子项时会费很多时间在findViewById中。
方案三:
优点:是布局文件设计简单、Activity中的代码也很少。
-
欢迎关注微信公众号、长期为您推荐优秀博文、开源项目、视频
-
微信公众号名称:Android干货程序员