我有一个可能有数百个条目的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的讨论,这意味着这是一个已知问题。是否有解决方法或我只是做错了?
提前致谢。
答案 0 :(得分:1)
setSelection的文档说它只在ListView处于触摸模式时滚动到所选位置。一旦数据集发生变化,也许ListView不再处于触摸模式,或者可能在下一个UI更新周期中忘记了setSelection。
我猜你可以通过延迟调用setSelection来尝试解决方法。例如,您可以使用postDelayed方法,延迟为100毫秒。或者,您可以扩展ListView并覆盖layoutChildren或可能在数据集更改时调用的相关内容,以便重新计算列表视图项目度量。那时调用setSelection应该是安全的,你不需要依赖猜测延迟。