ListView:滚动到ListView顶部的项目(并保持在那里)?

时间:2013-09-06 18:12:38

标签: java android listview android-listview runnable

我有一个包含大量项目的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,并且通常很糟糕。有人有更好的吗?

0 个答案:

没有答案