我有一个包含大量项目的ListView。我想找到一种方法让它滚动到某个位置,但是该位置位于视图的最顶端。
另一个问题是,在发生这种情况后,ListView会在某些时候重新生成并重新绘制,我需要它在重新绘制时返回到此位置。
我尝试过smoothScrollToPosition,但这只会将项目带入视图,而不会将其置于顶部。我试过scrollTo(x,y),但我不知道视图中项目的确切y位置。我已经尝试了setSelection和setSelectionFromTop,但是当视图失效时,选择会被重置。我也在post(Runnable)调用中尝试了所有这些事情,没有运气。
这是我目前的解决方案,这很糟糕。
listView.post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPosition(10000);
listView.smoothScrollToPosition(pos);
}
});
这会强制它向下滚动到底部并向上滚动,直到指定位置的项目进入视图,这样可以将其置于顶部。幸运的是,动画只能从顶部滚动到最终位置,因此它实际上不会向右滚动然后再向上滚动。然而,这个解决方案是缓慢的,hacky,并且通常很糟糕。有人有更好的吗?