2

我知道這個問題已經被多次詢問過,但我想我正在尋找一種不同的「跳過」。在ViewPager + TabLayout中跳過頁面

在具有TabLayout鏈接的ViewPager

ViewPager vp = (ViewPager) findViewById(...); 
TabLayout tl = (TabLayout) findViewById(...); 
vp.setAdapter(new NoSwipePagerAdapter()); 
tl.setupWithViewPager(vp); 

由於viewpager不滾動,預期的行爲是這樣的:如果「A」選項卡上的水龍頭,viewpager滾動到該選項卡。

我的問題是,如果我在「A」上,然後點擊「D」,viewpager會通過B和C進行動畫製作。我試圖做的是逐字「跳過」B和C並顯示D

主要是爲了表現的問題,因爲B和C是重的碎片,但也是爲了設計。

我試過setCurrentItem(int index, boolean smoothScroll)的每一個組合,並沒有奏效。

是否可以跳過ViewPager頁面?提前致謝。

回答

1

,如果你想跳過兩個片段,直接進入第四個片段,然後寫下面一行

ViewPager.setCurrentItem(3); 
+0

正如我所說,這不適合我。動畫時,ViewPager仍會顯示其他片段。 – Matteo

+1

當viewpager被創建時,它會得到預定義的片段流,所以viewpager不可能直接從A跳轉到D片段,但它會非常快地傳遞throgh中間片段 –

+0

我已經接受了這個答案,因爲它似乎沒有直接的方式來實現我正在尋找..最終我會嘗試實現一個自定義適配器在未來這樣做 – Matteo

0

我想,你應該創建PagerAdapter像波紋管

public class PagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

@Override 
public Fragment getItem(int position) { 

    Fragment fragment = null; 
    switch (position) { 
     case 0: 
      fragment = new Fragment_PatientList(); 

      break; 
     case 1: 
      fragment = new FragmentB(); 
      break; 
     case 2: 
      fragment = new FragmentC(); 
      break; 
     default: 
      return null; 
    } 
    return fragment; 
} 

@Override 
public int getCount() { 
    return mNumOfTabs; 
} 

} 

創建pagerAdapter後,設置viewPager.setAdapter(adapter) 最後,你可以像這樣連接tablayout和你的viewpager

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     }