首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android中管理后台

在android中管理后台
EN

Stack Overflow用户
提问于 2016-01-07 23:39:35
回答 2查看 928关注 0票数 1

目前,android应用程序的结构是

代码语言:javascript
复制
Home
   About us
   Products
     product1
     product2
     product3
   Contact us

由于有一个侧菜单,而且我可以直接访问产品1,所以我目前的尝试是为每个事务添加到后台,而且它的行为非常奇怪。

如果我这样说:

代码语言:javascript
复制
Home->product1->About us

流程是在输入主页后,单击侧菜单上的product1,在输入product1页面后单击侧菜单上的“关于我们”。

第一次按后退按钮,它将返回到product1,但它应该回家

第二次按后退按钮,它会回家,但它应该去产品页面。

在这种情况下,如何处理堆叠?谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-07 23:57:39

当您在适当的时候更改片段和popBackStack时,您将需要很聪明,以便控制堆栈。下面是我的应用程序中的一个示例(还处理堆栈中现有片段的重用):

代码语言:javascript
复制
// Idea from http://stackoverflow.com/questions/18305945/how-to-resume-fragment-from-backstack-if-exists
private void setPrimaryContentFragment(BaseFragment fragment, boolean allowStack){
    final String backStackName = fragment.getBackStackName();

    final FragmentManager manager = getSupportFragmentManager();
    final boolean fragmentPopped = manager.popBackStackImmediate(backStackName, 0);

    if (!fragmentPopped) { //fragment not in back stack, create it.
        if (!allowStack && manager.getBackStackEntryCount() > 1) {
            manager.popBackStack(manager.getBackStackEntryAt(0).getId(), 0);
        }

        final FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.primary_content, fragment);
        transaction.addToBackStack(backStackName);
        transaction.commit();

        try {
            manager.executePendingTransactions();
        } catch (IllegalStateException exception) {
            // Move along as this will be resolved async
        }
    }
}

getBackStack()方法是在我的基本片段中实现的,默认实现为:

代码语言:javascript
复制
public String getBackStackName() {
    return getClass().getName();
}

allowStack标志用于控制在后台是否可以有多个条目。

至于在用户直接导航到详细信息页时插入Product片段,您可能需要这样做。ie:对产品执行替换,然后对产品细节执行替换。希望这段代码片段和链接帖子将帮助您找到所需的解决方案。

票数 2
EN

Stack Overflow用户

发布于 2016-01-07 23:59:55

硬后退按钮将始终遍历堆栈,这是您的用户期望的行为。

如果您正在寻找将您带回到父活动的东西,比如返回到父产品屏幕的Product,那么您可以使用Up按钮函数定义它。从Android站点的Up导航

这样,您就不必尝试清除和管理后台堆栈,只需定义将用户带回父屏幕的项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34667170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档