实现“更快”的BackToTop-ListView

dan*_*c05 4 android smooth-scrolling android-listview android-actionbar

我在一个片段中有一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于不同的片段具有不同的“列表”类型,因此我在两个位置之间切换。就像我说的那样,这段代码确实可以很好地工作,但是有没有一种更快的滚动回顶部的方法?更即时的东西。

只是为了澄清一下,当我说它“花费太长时间”时,这是因为smoothScrollToPosition本身是一种在列表上滚动的慢速方法,应该使它看起来更好。

注意我确实尝试过:

list.scrollTo(0, 0);
Run Code Online (Sandbox Code Playgroud)

但这实际上似乎对listView的当前位置没有任何作用。我想这更多是一个View调用,一个ListView方法本身。

有任何想法吗?

Sam*_*Sam 5

尝试调用setSelection(),它不会执行任何动画:

list.setSelection(0);
Run Code Online (Sandbox Code Playgroud)