相关疑难解决方法(0)

使用Fragments为Android中的每个选项卡分隔Back Stack

我正在尝试在Android应用中实现导航标签.由于不推荐使用TabActivity和ActivityGroup,我想使用Fragments来实现它.

我知道如何为每个选项卡设置一个片段,然后在单击选项卡时切换片段.但是,如何为每个选项卡分别设置一个后备堆栈?

例如,片段A和B将位于选项卡1下,片段C和D位于选项卡2下.启动应用程序时,将显示片段A并选择选项卡1.然后片段A可能被片段B替换.当选择标签2时,应显示片段C. 如果选择了选项卡1,则应再次显示片段B. 此时应该可以使用后退按钮显示片段A.

此外,重要的是在旋转设备时保持每个标签的状态.

BR马丁

tabs android android-fragments

155
推荐指数
5
解决办法
7万
查看次数

Android中TabHost中每个片段的自定义后台堆栈

由于TabActivity已被弃用,我尝试将其替换为已在开发者android网站中提及的Fragments.但是你们已经知道有一个关于用片段替换制表符的问题,因为只有一个活动,即Fragment Activity,每个片段都没有后向堆栈,你可以在其他SO问题中看到开发人员说你需要管理自己的自定义后台堆栈作为解决方案.

我已经创建并实现了我自己的自定义后台堆栈,如下所示,它工作正常我可以跟踪每个选项卡中的每个片段.

TAB1

    Fragment1 > Fragment2 > Fragment3
Run Code Online (Sandbox Code Playgroud)

TAB2

    Fragment5 > Fragment6
Run Code Online (Sandbox Code Playgroud)

根据上面的导航,如果我从Fragment1导航到片段3,之后如果我将选项卡更改为Tab2并返回到Tab1,我仍然可以看到Fragment3,我甚至可以使用我的自定义后台堆栈导航回Fragment1.

但问题是,当我回到Tab1并看到Fragment3时,Fragment3被重新创建,在我将选项卡更改为Tab2之前,我无法看到更改.

这是我的自定义后台堆栈;

public static HashMap<String, Stack<Fragment>> customBackStack;

public static Stack<Fragment> simpleStack;
public static Stack<Fragment> contactStack;
public static Stack<Fragment> customStack;
public static Stack<Fragment> throttleStack;
public static Stack<Fragment> homeStack;

customBackStack = new HashMap<String, Stack<Fragment>>();

homeStack = new Stack<Fragment>();
simpleStack = new Stack<Fragment>();
contactStack = new Stack<Fragment>();
customStack = new Stack<Fragment>();
throttleStack = new Stack<Fragment>();

customBackStack.put("home", homeStack);
customBackStack.put("simple", simpleStack);
customBackStack.put("contacts", contactStack);
customBackStack.put("custom", customStack);
customBackStack.put("throttle", throttleStack);
Run Code Online (Sandbox Code Playgroud)

这里是onTabChanged方法;

        public void onTabChanged(String …
Run Code Online (Sandbox Code Playgroud)

android android-tabhost android-fragments

5
推荐指数
1
解决办法
5162
查看次数