今天我注意到当你在ListView中进行快速双重拖动时,列表将转到列表的结尾或开头。看起来这只发生在三星手机上。
这已经成为一个问题因为我将JazzyListView动画效果添加到列表中的元素上,并且每当这种快速移动发生时它们就会崩溃。 (只要调用ListView.layoutChildren方法,就会出现NullPointerException)
也许我需要修改库,还是以任何方式禁用此ListView行为?
答案 0 :(得分:2)
这个效果被称为" DOUBLE FLING ",每当我这样做时它会出现在logcat中,不幸的是在AbsListView中你唯一能做的就是设置摩擦力速度尺度。如果有人知道如何禁用效果,那就太棒了(然而,这可能不是解决此问题的最佳方案,因为用户可能熟悉该行为)
我所做的(我的快速+脏解决方案)是修改JazzyListView库,特别是JazzyHelper类,仅在应用动画之前验证该项不为null:
while (firstVisibleItem + indexAfterFirst < mFirstVisibleItem) {
View item = view.getChildAt(indexAfterFirst);
if(item != null) {
doJazziness(item, firstVisibleItem + indexAfterFirst, -1);
}
indexAfterFirst++;
}
int indexBeforeLast = 0;
while (lastVisibleItem - indexBeforeLast > mLastVisibleItem) {
View item = view.getChildAt(lastVisibleItem - firstVisibleItem - indexBeforeLast);
if(item != null) {
doJazziness(item, lastVisibleItem - indexBeforeLast, 1);
}
indexBeforeLast++;
}
我相信我应该修改一些关于实例属性mFirstVisibleItem的内容,否则fastscrolling会删除显示项目时的动画。但是,我的解决方案适用于任何想要快速解决此问题的人。