2

我試圖將ActionBar Tabs綁定到ViewPager。在開始時,我爲ActionBar TabsViewPager創建了兩個單獨的項目,並且它們工作正常。當試圖相互綁定時,根據下面的代碼,ViewPager遵守TabListener,換句話說,當我觸摸ActionBar TabViewPager相應地改變並顯示相應的View。例如,我有三個Tabs,當觸摸第二個號碼Tab時,ViewPager顯示相應的第二個頁碼。等等。將ActionBar選項卡綁定到ViewPager

ActionBar Tabs不服從ViewPager,在其他意義,刷卡時屏幕移動到ViewPager下一個頁面,該ViewPager展示了各自的ViewActionBar Tab沒有根據改變其當前的選中狀態當前ViewPager的選擇View。例如,當滑動到第三個ViewPage時,ViewPager顯示其受到尊重的View,它是第三個,但是,當前選定的ActionBar Tab不會更改爲第三個。我可以訪問ViewPage三個,而突出顯示的Tab是第一。

我希望我能清楚地解釋這個問題。

MainActivity

private ViewPager mViewPager; 
private MyTabsPagerAdapter mPagerAdapter; 
private ActionBar mActionBar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    List<Fragment> mFragList = new ArrayList<Fragment>(); 
    mFragList.add(new Fragment01()); 
    mFragList.add(new Fragment02()); 
    mFragList.add(new Fragment03()); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mActionBar = getActionBar(); 
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    mPagerAdapter = new MyTabsPagerAdapter(getSupportFragmentManager(), mFragList); 
    mViewPager.setAdapter(mPagerAdapter); 

    for(int i=0; i<mFragList.size(); i++) { 
     mActionBar.addTab(mActionBar.newTab().setText("Fragment0"+(i+1)).setTabListener(this));   
    } 
} 
@Override 
public void onTabReselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTabSelected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 
    mViewPager.setCurrentItem(arg0.getPosition()); 
    //mActionBar.setSelectedNavigationItem(arg0.getPosition()); 
} 

@Override 
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

}

MyTabsPagerAdapter

public class MyTabsPagerAdapter extends FragmentPagerAdapter { 

List<Fragment> mFragList; 

public MyTabsPagerAdapter(FragmentManager fm, List<Fragment> mFragList) { 
    super(fm); 
    // TODO Auto-generated constructor stub 
    this.mFragList = mFragList; 
} 

@Override 
public Fragment getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return this.mFragList.get(arg0); 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return this.mFragList.size(); 
} 

}

回答

4

您需要設置爲當例如viewpager變化,

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      actionBar.setSelectedNavigationItem(position); 
     } 
    }); 

這等待viewpager改變監聽器,並當它,它設置等於你移動viewpager的位置,動作條位置。

+0

謝謝我一直在嘗試2周,真的發現這個監聽器在教程中提到。現在它工作 – user2121

+0

很高興它現在爲你工作。 – user3331142

相關問題