美文网首页android开发杂识天花板谈Android开发Android
面试题-ScrollView中嵌入ListView常见问题和解决

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

作者: 小怪兽打葫芦娃 | 来源:发表于2017-07-11 13:49 被阅读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中的代码也很少。

    • 欢迎关注微信公众号、长期为您推荐优秀博文、开源项目、视频

    • 微信公众号名称:Android干货程序员

    相关文章

      网友评论

      • f5d6ee5118da:马哥解释一下第三个不太懂?
      • boboyuwu:如果分页加载就不行了
        小怪兽打葫芦娃:@boboyuwu 谷歌不建议嵌套
        boboyuwu:@第三天_5c80 嵌套了怎么分页,首先嵌套复用就失效了,这是万不得已的做法,嵌套还会导致一系列的冲突
        f5d6ee5118da: @boboyuwu 为啥不行啊解释一下
      • f5d6ee5118da:这个方案3是怎么做到了适应scrollview得,重写了就可以吗?不太懂原理
      • f5d6ee5118da:不太懂啊,有视频吗😂

      本文标题:面试题-ScrollView中嵌入ListView常见问题和解决

      本文链接:https://www.haomeiwen.com/subject/atjyhxtx.html