【问题标题】:Android ActionBar Tabs with FragmentPagerAdapter Class - saving the last tab selected when reloading activity带有 FragmentPagerAdapter 类的 Android ActionBar 选项卡 - 保存重新加载活动时选择的最后一个选项卡
【发布时间】:2014-10-26 16:27:39
【问题描述】:

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

我尝试了许多不同的解决方案来尝试在重新加载 Activity 时加载先前选择的选项卡,包括 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;
}
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-11
      • 2018-10-24
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      相关资源
      最近更新 更多