我有一个 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);
}
});
这迫使它向下滚动到底部并向上滚动,直到指定位置的项目进入视图,这具有将其放置在顶部的效果。幸运的是,动画只是从顶部滚动到结束位置,所以它实际上并没有播放到滚动到底部然后返回。然而,这个解决方案很慢,很麻烦,而且通常很糟糕。有人有更好的吗?