android - 实现 "faster"backToTop - ListView

标签 android android-listview android-actionbar smooth-scrolling

我在 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;
    }
}

我在位置之间切换的地方,因为我的不同 fragment 具有不同的“列表”类型。正如我所说,这段代码确实运行良好,但是有没有更快的方法可以滚动回顶部?更即时的东西。

澄清一下,当我说它“需要太长时间”时,那是因为 smoothScrollToPosition 本身是一种在列表上滚动的缓慢方式,据说是为了让它看起来更好看。

注意我试过:

list.scrollTo(0, 0);

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

有什么想法吗?

最佳答案

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

list.setSelection(0);

关于android - 实现 "faster"backToTop - ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005949/

相关文章:

android - 在与 PendingIntent 相同的 Activity 中选择通知,但 ViewPage 不同

android - ListView 与网页 View

android - 如何让toolBar和tabBar float 在背景上

java - 如何使用 Holo.NoActionBar 主题隐藏 HTC one 上的操作栏

android - 单击其他菜单项时如何在操作栏上获取菜单项 ID

javascript - React Native 从异步 componentDidMount 获取初始状态

Android FFMPEG Appunite 库问题

java - 如何创建一个从 Glide 请求图像发送图像的服务器?

Android ListView OnItemClick 更改 View 属性

android - ListView 占用了 LinearLayout 中的所有空间