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