ListView或GridView上添加能一起滚动的Button效果的解决思路

来源:互联网 发布:部落冲突vb.67.9破解版 编辑:程序博客网 时间:2024/05/16 05:02
※思路Ⅰ.Button和ListView外层包上ScrollView※

◆缺点:

①UI问题

     Android官方不建议在ScrollView内嵌套ListView或GridView,因为有如下Bug。

     ・ListView在ScrollView中显示不全。需要覆写ListViewのonMeasure()解决这个问题

     ・ListView在ScrollView中不能实时的滚动到顶部。需要在onWindowFocusedChanged()中手动调节ListView的位置

     PS:解决方案参照:http://www.tuicool.com/articles/FzmU32b

②性能影响:覆写ListViewのonMeasure()导致ListView的项目在只看到部分item的情况下,实际上已经将全部item加载完毕,会对性能造成影响

③其他影响:正因为覆写ListView的onMeasure()导致ListView的全部item加载完毕,getFirstVisiblePosition()永远是0,getLastVisiblePosition永远是item总数。

这种情况下,要用到getFirstVisiblePosition()和getLastVisiblePosition()的话,得到的结果是不正确的。


◆优点:

    并不会影响到加载的数据的下表,不用在adapter的getView()当中特别处理下标。


※思路Ⅱ.修改第一个元素布局为Button的布局※

◆方法ⅰ.调用ListView的addHeadView(Button的layout)

缺点:

     ①数据下标影响。ListView的第一个元素变成了Button,要注意在adapter的getView()当中特别处理下标为0的情况。包括UI显示和事件监听。

     ②GridView控件官方没有提供addHeadView()方法。

     PS:其实AOSP项目中Gallery APP已经有ASIS提供的GridView的addHeadView()方法,实际使用过,有显示的问题,可能这也是AOSP没有将这个API公开的原因之一。

     PS:如果不是GridView的话,个人比较推荐这种方案。

◆方法ⅱ.在adapter的getView()里判断下标、0的时候,加载Button的layout。

0 0
原创粉丝点击