Android - 三星问题 - ListView快速滚动双拖

时间:2013-07-15 07:08:47

标签: android listview nullpointerexception scroll jazzylistview

今天我注意到当你在ListView中进行快速双重拖动时,列表将转到列表的结尾或开头。看起来这只发生在三星手机上。

这已经成为一个问题因为我将JazzyListView动画效果添加到列表中的元素上,并且每当这种快速移动发生时它们就会崩溃。 (只要调用ListView.layoutChildren方法,就会出现NullPointerException)

也许我需要修改库,还是以任何方式禁用此ListView行为?

1 个答案:

答案 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会删除显示项目时的动画。但是,我的解决方案适用于任何想要快速解决此问题的人。