我在 Fragment 中有一个 ListView,它作为选项卡添加到 ViewPager 中。我希望用户能够通过简单地点击他们已经在的选项卡(onTabReselected())来滚动“backToTop”。我已经有一个工作代码来做到这一点;但是,我使用的代码需要太长时间才能滚动回位置 0,这在小型列表中非常简洁,但在 250 首歌曲的集合中,它肯定会惹恼用户。
这是我的代码:
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
switch (tab.getPosition()) {
case 0:
if (tab.getPosition() == mCurPagerItem) {
final ListView list = (ListView) findViewById(android.R.id.list);
list.smoothScrollToPosition(0);
}
break;
case 1:
if (tab.getPosition() == mCurPagerItem) {
final GridView list = (GridView) findViewById(R.id.artist_grid);
list.smoothScrollToPosition(0);
}
break;
case 2:
if (tab.getPosition() == mCurPagerItem) {
final ExpandableListView list = (ExpandableListView) findViewById(R.id.exp_list);
list.smoothScrollToPosition(0);
}
break;
default:
break;
}
}
当我的不同片段具有不同的“列表”类型时,我在位置之间切换。正如我所说,这段代码运行良好,但是有没有更快的方法来滚动回到顶部?那是更即时的东西。
澄清一下,当我说它“花费太长时间”时,那是因为smoothScrollToPosition本身就是一种在列表上滚动的缓慢方式,据说是为了让它看起来更好看。
注意我确实尝试过:
list.scrollTo(0, 0);
但这实际上似乎对 listView 的当前位置没有任何作用。我想这更像是一个 View 调用,一个 ListView 方法本身。
有任何想法吗?