带有FragmentPagerAdapter类的Android ActionBar选项卡 - 保存重新加载活动时选择的最后一个选项卡

时间:2014-10-26 16:27:39

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

我正在开发一个使用ActionBar.NAVIGATION_MODE_TABS和一个单独的FragmentPagerAdapter类的应用程序,以便刷过5个不同的屏幕。在这些屏幕上,您可以按下按钮来加载新活动,然后在完成后返回MainActivity。我的问题是,每次返回并重新加载MainActivity时,它都会默认返回第一个选项卡(0)。

我尝试了许多不同的解决方案,尝试在重新加载活动时加载之前选择的选项卡,包括SharedPreferences,保存实例状态并尝试强制FragmentPagerAdapter类在调用时加载某个片段 - 但是有些东西会一直覆盖它它总是会回到第一个标签(0)而不会失败。我真的很感激任何可能的解决方案。

代码如下:

public class MainActivity extends FragmentActivity implements TabListener {

ActionBar tabBar;
ViewPager viewPager;

@Override
protected void onCreate(Bundle currenttab) {
    super.onCreate(currenttab);
    setContentView(R.layout.activity_main);

    // Sets up view pager
    viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setCurrentItem(0);
    viewPager.setAdapter(new MainAdapter(getSupportFragmentManager()));
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int currenttab) {
            tabBar.setSelectedNavigationItem(currenttab);
        }

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

        @Override
        public void onPageScrollStateChanged(int currenttab) {
        }

    });

    // Adds tabs to action bar
    tabBar = getActionBar();
    tabBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab tab1 = tabBar.newTab();
    tab1.setIcon(R.drawable.action);
    tab1.setTabListener(this);

    ActionBar.Tab tab2 = tabBar.newTab();
    tab2.setIcon(R.drawable.jobs);
    tab2.setTabListener(this);

    ActionBar.Tab tab3 = tabBar.newTab();
    tab3.setIcon(R.drawable.historic);
    tab3.setTabListener(this);

    ActionBar.Tab tab4 = tabBar.newTab();
    tab4.setIcon(R.drawable.breeds);
    tab4.setTabListener(this);

    ActionBar.Tab tab5 = tabBar.newTab();
    tab5.setIcon(R.drawable.special);
    tab5.setTabListener(this);

    tabBar.addTab(tab1);
    tabBar.addTab(tab2);
    tabBar.addTab(tab3);
    tabBar.addTab(tab4);
    tabBar.addTab(tab5);
}

// Action bar methods
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}

// Class to deal with swipe function

class MainAdapter extends FragmentPagerAdapter {
public MainAdapter(FragmentManager fm) {
    super(fm);
}


@Override
public Fragment getItem(int currenttab) {
    // TODO Auto-generated method stub
    Fragment fragment = null;
    if (currenttab == 0) {
        fragment = new FragmentAction();
    }
    if (currenttab == 1) {
        fragment = new FragmentJobs();
    }
    if (currenttab == 2) {
        fragment = new FragmentHistory();
    }
    if (currenttab == 3) {
        fragment = new FragmentBreeds();
    }
    if (currenttab == 4) {
        fragment = new FragmentSpecial();
    }
    return fragment;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 5;
}
}

1 个答案:

答案 0 :(得分:0)

我设法通过使我的后退按钮行为模仿调用onBackPressed();的内置行为来解决这个问题。使用我以前的代码回来的问题是创建一个MainActivity的新实例,从而将它默认为第一个选项卡。