3

我有一个片段,其被添加作为一个ViewPager内的选项卡内部一个ListView。我希望用户通过简单地在选项卡窃听他们已经在(onTabReselected()),以能够滚动“backToTop”。我已经有一个工作代码来做到这一点;但是,我使用的代码花费的时间太长,无法回滚到位置0,这在小列表上非常整齐,但在250首歌曲集合中,它肯定会让用户恼火。实现一个“更快” backToTop - 的ListView

这里是我的代码:

@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; 
    } 
} 

我在哪里我的不同​​片段positons之间切换有不同的“列表”类型。正如我所说的,这段代码工作得很好,但有更快的方法可以回滚到顶部吗?这是更即时的东西。

只是为了澄清,当我说它“花费太长时间”时,这是因为smoothScrollToPosition本身是一个在列表中滚动的缓慢方式,据说可以使它更好看。

注意我曾尝试:

list.scrollTo(0, 0); 

,但实际上似乎并没有做任何事情来ListView的当前位置。我想这是更多的视图调用,即一个ListView方法本身。

任何想法?

回答

4

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

list.setSelection(0); 
+0

我可以我相信我以前没有尝试过,我想我应该再读一下这个方法的描述吧?我一直认为会将其标记为选中状态(如高亮显示和不显示)。谢谢! –

+0

如果ListView控件不采取重点从触摸手势('setFocusableInTouchMode(假)'),那么将突出该行......这样你就不会太远了! :) – Sam