分析源码,初步断定原因:
当ListView滚动到最底部(最顶部)时,触发了2.3新引入的视觉特效。这部分逻辑里看到了特效相关的代码,但却没找到通知reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE)的相关代码。其它地方通知reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE)的地方伴随着mTouchMode
= TOUCH_MODE_REST,而特效代码这里却只有mTouchMode = TOUCH_MODE_REST,无reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE),源码如下:
void startSpringback() {
Log.d(tag, "simba startSpringback");
if (mScroller.springBack(0, mScrollY, 0, 0, 0, 0)) {
mTouchMode = TOUCH_MODE_OVERFLING;
invalidate();
post(this);
} else {
mTouchMode = TOUCH_MODE_REST;
//这里没有调用下面注释的代码,导致ListView注册的OnScrollListener不会得到通知
//reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
}
}
在网上找到相关的解决方法如下:
为ListView设置一个OnTouchListener,在这个OnTouchListener中当MotionEvent的action等于MotionEvent.ACTION_UP或者MotionEvent.ACTION_CANCEL时强制调用一次
onScrollStateChanged((AbsListView) view,OnScrollListener.SCROLL_STATE_FLING),
然后再调用一次
onScrollStateChanged((AbsListView) view,OnScrollListener.SCROLL_STATE_IDLE)
代码如下:
public class FingerTracker implements View.OnTouchListener {
private OnScrollListener myOnScrollListener;
public FingerTracker(OnScrollListener onScrollListener) {
myOnScrollListener = onScrollListener;
}
@Override
public boolean onTouch(View view, MotionEvent event) {
final int action = event.getAction();
boolean mFingerUp = action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_CANCEL;
if (mFingerUp) {
myOnScrollListener.onScrollStateChanged((AbsListView) view,
OnScrollListener.SCROLL_STATE_FLING);
myOnScrollListener.onScrollStateChanged((AbsListView) view,
OnScrollListener.SCROLL_STATE_IDLE);
}
return false;
}
}
为ListView设置自定义的OnTouchListener:
mListView.setOnTouchListener(new FingerTracker(this));
效果待测!
原文位置:
http://yanlijun250.iteye.com/blog/1438303
http://code.google.com/p/android/issues/detail?id=5086
分享到:
相关推荐
android studio实现listview的增加,左滑删除 listview以表格样式实现
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能。分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为...
主要介绍了Android应用中ListView利用OnScrollListener分页加载数据的方法,包括对OnScrollListener事件顺序次数的分析,需要的朋友可以参考下
Android中的ListView控件学习
利用android studio实现listview嵌套listview,技术含量不是特别高,希望能帮助大家,这里就意思一下,给1分算啦
android 嵌套的listview示例。就是外面一层listview,这层的item展开又是一个listview。我的博客地址:http://blog.csdn.net/qq_16064871。
android关于listview之列表分组,像Q上一样显示列表项
listview嵌套listview简单的小案例
android dialog嵌套ListView,实现对ListView的添加,删除操作
在实际开发中,很多项目都用到了,listView添加头部的写法,疫情我以为很难,最近偶然发现很简单,所以下了一个例子和大家交流
Android完美解决listview中多个edittext显示混乱问题,内含源码及apk文件
Android漂亮的Listview完整版本,介绍了ListView开发全过程
ListView下拉刷新 ListView下拉刷新ListView下拉刷新ListView下拉刷新
基于Eclipse开发平台,Android中使用ListView和三种适配器(ArrayAdaper,SimpleAdapter,BaseAdapter)实现数据的填充。
Android Menu和ListView 整合设计 源码 package com.MyMenu; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import ...
Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 blog 地址 : http://blog.csdn.net/aaawqqq/article/details/43824631
android listview嵌套listview实现折叠列表
android app widget 使用listview 源码
注意 我用最新sdk(22 63) 可能有些同学不是最新 项目中没有自动生成appcompat v7 就把附件的项目导进去 ">最近在做android项目时 发现要在listView用到Button等各种点击事件 经过各种百度 发现有两个简单的方法...
android--ListView实现带标题栏效果(附源码)