【问题标题】:Implementing a "faster" backToTop - ListView实现“更快”的 backToTop - ListView
【发布时间】:2012-12-22 19:37:47
【问题描述】:

我在 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 方法本身。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    list.setSelection(0);
    

    【讨论】:

    • 我不敢相信我以前没有尝试过,我想我应该进一步阅读该方法的描述吧?我一直认为这会将其标记为选中(如突出显示等)。谢谢!
    • 如果 ListView 没有从触摸手势中获得焦点 (setFocusableInTouchMode(false)),那么它将突出显示该行......所以你离得太远了! :)
    • 精准解。
    【解决方案2】:
    int position = 10; // 10 or other
    
    if (list.getFirstVisiblePosition() > position) {
        list.setSelection(position);
        list.smoothScrollToPosition(0);
    } else {
        list.smoothScrollToPosition(0);
    }
    

    更新时间:2013-10-27 从 API 级别 11 开始,您可以使用 smoothScrollToPositionFromTop (int position, int offset, int duration)

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多