在我的应用程序中,我有一个活动,它实例化一个带有三个Fragment类的ActionBar
。
// create action bar
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
// set tabs
Tab tab = null;
tab = actionBar.newTab()
.setIcon(R.drawable.tabbar_app_selected)
.setTag(Globals.MainActivityTab.NewApp)
.setTabListener(new MainActivityTabListener<BasicFormFragment>(this, "new_app_frag", BasicFormFragment.class, this));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setIcon(R.drawable.tabbar_saved)
.setTag(Globals.MainActivityTab.Saved)
.setTabListener(new MainActivityTabListener<SavedAppFragment>(this, "saved_apps_frag", SavedAppFragment.class, this));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setIcon(R.drawable.tabbar_settings)
.setTag(Globals.MainActivityTab.Settings)
.setTabListener(new MainActivityTabListener<SettingsFragment>(this, "settings_frag", SettingsFragment.class, this));
actionBar.addTab(tab);
在我的应用程序运行期间,有时需要为特定选项卡显示新片段。 Todo我通过下面的FragmentManager
添加一个新片段。这是为了模拟可在任何移动应用程序中找到的向下钻取类型的界面。
// show report screen
AppReportOptionsFragment reportOptionsFragment = new AppReportOptionsFragment();
reportOptionsFragment.SetAppraisal(_app);
reportOptionsFragment.SetIsNew(_isNew);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.SavedAppFrame, reportOptionsFragment);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack("AppReportOptionsFragment");
fragmentTransaction.commit();
这段代码工作正常,我看到我的片段取代了之前的片段。我还保留更改标签的功能,标签更改就是问题所在。
基本上,我遇到的问题是当我实例化上面的新片段,然后更改为其他选项卡,然后将前一个选项卡重置为原始片段。因此,清除用户在上一个选项卡上可能完成的任何工作。
我的问题是如何强制应用程序保留上一个标签的子片段,这样当我再次点击标签时,用户将在离开时看到标签。基本上,我希望这与iOS中的UITabbarController
完全一致。
有关我在这里做错了什么的任何建议,是否有更好的方法来实现Fragments和Actionbar选项卡的向下钻取界面?
谢谢!
答案 0 :(得分:1)
此答案无法解决您的问题。
这只是关于新API的警告。如果您使用的是api 21(如果您支持旧设备并不重要),则应考虑更改模式,因为NAVIGATION_MODE_TABS
现已弃用。
您可以在GoogleIO应用中使用类似SlidingTabLayout
的模式。