Android 带有片段的操作栏选项卡
Android Actionbar tabs with fragments
在我的应用程序中,我有一个 activity 实例化一个 ActionBar
和三个 Fragment 类.
// 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);
在我的应用程序运行期间,有时我需要显示特定选项卡的新片段。为此,我通过 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 选项卡的向下钻取界面?
谢谢!
此回答无法解决您的问题。
这只是关于新 API 的警告。如果您使用 api 21(如果您支持旧设备并不重要),您应该考虑更改模式,因为 NAVIGATION_MODE_TABS
现在已弃用。
您可以在 GoogleIO 应用中使用类似 SlidingTabLayout
的模式。
Use Tab with new ToolBar (AppCompat v7-21)
在我的应用程序中,我有一个 activity 实例化一个 ActionBar
和三个 Fragment 类.
// 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);
在我的应用程序运行期间,有时我需要显示特定选项卡的新片段。为此,我通过 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 选项卡的向下钻取界面?
谢谢!
此回答无法解决您的问题。
这只是关于新 API 的警告。如果您使用 api 21(如果您支持旧设备并不重要),您应该考虑更改模式,因为 NAVIGATION_MODE_TABS
现在已弃用。
您可以在 GoogleIO 应用中使用类似 SlidingTabLayout
的模式。
Use Tab with new ToolBar (AppCompat v7-21)