android开发杂识天花板谈Android开发Android

面试题-ScrollView中嵌入ListView常见问题和解决

2017-07-11  本文已影响479人  小怪兽打葫芦娃

Android程序员面试宝典

问题:

ScrollView内部嵌套的ListView,数据显示不完整。

原因:

ScrollView的滑动事件的消费处理以及ListView控件的高度设定问题

解决方案:

第一种解决方案:手动动态设置ListView高度:

该方法缺陷:

  1. Adapter中getView方法返回的View的必须由LinearLayout组成,如果使用其他的布局如RelativeLayout,在调用listItem.measure(0, 0);时就会抛异常

  2. 把整个需要放在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中的代码也很少。

上一篇下一篇

猜你喜欢

热点阅读