android -- 小问题 关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题

关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题:

原因:

首先OnScrollListener是焦点滚动的监听事件,需要有焦点才能响应。如果在ScrollView中内嵌了ListView之后,动态计算了ListView的高度,并予以设置高度,那么这时用户拖动界面,造成的滚动是ScrollView的滚动,而并非ListView的滚动,此时焦点是被ScrollView夺去的,ListView自然就不响应OnScrollListener的监听咯,同样的在模拟器上使用鼠标滚轮滑动ListView导致的不响应OnScrollListener也是如此。

假设和解决办法:




如果此时listView位于ScrollView的最底端,而ListView的上方还有一些数据控件需要显示,而listView又需要动态设置高度且需要完成分页加载的功能,如图所示,该怎么办呢?

 

 

 

不要紧张,办法是有的,接着往下看吧:

 

1.刚开始我采用监听ScrollView滑动到最底端则加载更多的方式,可是这又导致一个问题,当ScrollView内嵌ListView时候,ListViewnotifyDataSetChanged()方法因为需要获取界面资源的原因,在ScrollView中刷新时会导致主线程的卡顿,具体原因不清楚,估计是调用notifyDataSetChanged()方法时,焦点的夺取导致了主线程卡顿,那么这种情况又不行了。

2.接着我想试试能不能自定义ScrollView在内嵌ListView的时候自动把焦点给ListView,可这又牵扯到一个问题,ScrollView的滑动也是需要焦点的。纠结了一段时间后,我认为此解决方式太过麻烦且不通用,一旦遇到别的情况又要重新自定义控件。SoPASS!

最后我使出杀手锏,采用ListView + HeadView + footerView的方式,也就是分成三块,自定义HeadView的显示内容,自定义footerView的显示内容,既简单又通用,完全满足了我的需求,但是这里有一个需要注意的,这种转台(ListViewHeadView的情况下)下给lsitView设置OnItemClickListener,那么OnItemClickListener的一个方法:

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3){

}

此时的点击position应该是arg3,而不是arg2,因为ListView的HeadView会占用一个item


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值