将ActionBar选项卡绑定到ViewPager

时间:2014-06-25 12:18:11

标签: android android-fragments tabs android-actionbar android-viewpager

我正在尝试将ActionBar Tabs绑定到ViewPager。在一开始,我为ActionBar TabsViewPager创建了两个单独的项目,它们工作正常。当尝试将彼此绑定时,根据下面的代码,ViewPager符合TabListener,在其他意义上,当我触及ActionBar Tab ViewPager更改时相应地显示相应的View。例如,我有三个Tabs,当触摸Tab数字2时,ViewPager显示相应的页码2。等等。

但是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();
}

}

1 个答案:

答案 0 :(得分:4)

您需要为viewpager更改时设置一个侦听器,例如

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

等待viewpager更改,当它发生时,它将操作栏位置设置为等于您将viewpager移动到的位置。