我正在尝试将ActionBar Tabs
绑定到ViewPager
。在一开始,我为ActionBar Tabs
和ViewPager
创建了两个单独的项目,它们工作正常。当尝试将彼此绑定时,根据下面的代码,ViewPager
符合TabListener
,在其他意义上,当我触及ActionBar Tab
ViewPager
更改时相应地显示相应的View
。例如,我有三个Tabs
,当触摸Tab
数字2时,ViewPager
显示相应的页码2。等等。
但是ActionBar Tabs
不遵守ViewPager
,在其他意义上,当滑动屏幕移动到ViewPager
的下一页时,ViewPager
显示相应的View
但ActionBar 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();
}
}
答案 0 :(得分:4)
您需要为viewpager更改时设置一个侦听器,例如
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
等待viewpager更改,当它发生时,它将操作栏位置设置为等于您将viewpager移动到的位置。