ListView smoothScrollToPosition()的替代?

时间:2012-07-09 20:29:42

标签: android

我有一个可能有数百个条目的ListView。当我做出选择时,我一直在使用smoothScrollToPosition,因此:

if (lv != null) { //Are we created yet?
    lv.post(new Runnable() {
        public void run() {
            lv.smoothScrollToPosition(k);  
        }
    });
}

但是我的用户告诉我他们不喜欢滚动动画,而是希望立即去那里。所以我用

替换了我的平滑滚动
lv.setSelection(k);

......现在它什么也没做。 FWIW这一切都发生在 notifyDatasetChanged

之后

在搜索解决方案时,我遇到了http://code.google.com/p/android/issues/detail?id=6741的讨论,这意味着这是一个已知问题。是否有解决方法或我只是做错了?

提前致谢。

1 个答案:

答案 0 :(得分:1)

setSelection的文档说它只在ListView处于触摸模式时滚动到所选位置。一旦数据集发生变化,也许ListView不再处于触摸模式,或者可能在下一个UI更新周期中忘记了setSelection。

我猜你可以通过延迟调用setSelection来尝试解决方法。例如,您可以使用postDelayed方法,延迟为100毫秒。或者,您可以扩展ListView并覆盖layoutChildren或可能在数据集更改时调用的相关内容,以便重新计算列表视图项目度量。那时调用setSelection应该是安全的,你不需要依赖猜测延迟。