【问题标题】:Binding the ActionBar Tabs to a ViewPager将 ActionBar 选项卡绑定到 ViewPager
【发布时间】:2014-06-25 12:18:10
【问题描述】:

我正在尝试将ActionBar Tabs 绑定到ViewPager。一开始我为ActionBar TabsViewPager 创建了两个独立的项目,它们运行良好。当尝试相互绑定时,根据下面的代码,ViewPager 符合TabListener,换句话说,当我触摸ActionBar Tab 时,ViewPager 会相应更改并显示相应的View .例如,我有三个Tabs,当触摸第二个Tab时,ViewPager会显示相应的第二页。等等。

但是ActionBar Tabs不服从ViewPager,换句话说,当滑动屏幕移动到ViewPager的下一页时,ViewPager显示各自的View但@987654338 @ 不会根据当前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();
}

}

【问题讨论】:

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


    【解决方案1】:

    你需要设置一个监听器,例如当viewpager改变时,

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

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

    【讨论】:

    • 谢谢我已经尝试了2周,真的发现教程中提到了这个监听器。现在它正在工作
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多