2015-04-01 83 views
2

我正在嘗試更改片段onTabSelectedonTabSelected change片段

因爲目前,如果你滑過轉換工作正常。但是如果你點擊Tab,碎片將不會切換。 Tab被突出顯示,但內容保持不變。我的onTabSelected方法。我需要關於如何切換到片段onTabSelected的建議。

可惜我不能延長我MainActivityFragmentActivity,因爲我將無法在這種情況下使用ActionBar(我需要擴展ActionBarActivity)。

onTabSelected片段:

@Override 
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    int position = tab.getPosition(); 

    switch (position) { 
    case 0: 
     break; 
    case 1: 
     break; 
    case 2: 
     break; 
    } 
} 

部分MainActivity的是,這裏重要的:

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener { 

    private ViewPager viewPager; 
    private TabsPagerAdapter mAdapter; 
    private ActionBar actionBar; 

    // Tab titles 
    private String[] tabs = { "Novice", "Članki", "O Tribuni" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Initilization 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     actionBar = getSupportActionBar(); 
     mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(mAdapter); 
     actionBar.setHomeButtonEnabled(false); 
     actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS); 

     // Adding Tabs 
     for (String tab_name : tabs) { 
      actionBar.addTab(actionBar.newTab().setText(tab_name) 
        .setTabListener(this)); 

     } 

     /** 
     * on swiping the viewpager make respective tab selected 
     * */ 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int position) { 
       // on changing the page 
       // make respected tab selected 
       actionBar.setSelectedNavigationItem(position); 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
      } 
     }); 


    } 

任何幫助/建議表示讚賞。

回答

7

OK,我想通了我自己的傢伙。 答案是通知viewPager關於TabSelected

使用此行代碼在你onTabSelected方法:

mViewPager.setCurrentItem(tab.getPosition()); 

希望它可以幫助別人呢!

+0

真的有幫助!非常感謝你! – Konayuki 2017-02-28 07:33:50

0

這爲我工作,所以應該爲你工作:

@Override 
public void onTabSelected(android.support.v7.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction fragmentTransaction) { 
    mViewPager.setCurrentItem(tab.getPosition(),true); 
    drawerLayout.closeDrawers(); 
} 
+0

我們張貼在同一時間,我只是理解了它也:)感謝壽! – 2015-04-01 17:05:19

1

而不是使用OnTabSelectedListener,你可以實現一個FragmentPagerAdapterViewPager事件轉發到TabLayout

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
tabLayout.addTab(...); 

ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
viewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager())); 
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));