gpt4 book ai didi

android - 管理android中的backstack

转载 作者:行者123 更新时间:2023-11-29 20:11:50 25 4
gpt4 key购买 nike

目前android应用的结构是

Home
About us
Products
product1
product2
product3
Contact us

因为有一个侧面菜单,我可以直接访问产品 1,我目前的尝试是为每笔交易添加到后台,它的行为很奇怪

如果我这样进入:

Home->product1->About us

流程是进入首页后,点击侧边菜单的product1,进入product1页面后点击侧边菜单的about us

第一次按下后退按钮,它会返回到 product1,但它应该回到主页

第二次按后退按钮,它会回到主页,但它应该会转到产品页面

遇到这种情况如何处理backstack?感谢您的帮助。

最佳答案

在适当的时候更改 fragment 和 popBackStack 以控制堆栈时,您需要保持聪明。这是我的一个应用程序的示例(也处理重用堆栈中的现有 fragment ):

// 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() 方法在我的基本 fragment 中实现,默认实现为:

public String getBackStackName() {
return getClass().getName();
}

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

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

关于android - 管理android中的backstack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com