3

我有一个 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);
    }
  });

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

4

0 回答 0