目前,android应用程序的结构是
Home
About us
Products
product1
product2
product3
Contact us由于有一个侧菜单,而且我可以直接访问产品1,所以我目前的尝试是为每个事务添加到后台,而且它的行为非常奇怪。
如果我这样说:
Home->product1->About us流程是在输入主页后,单击侧菜单上的product1,在输入product1页面后单击侧菜单上的“关于我们”。
第一次按后退按钮,它将返回到product1,但它应该回家
第二次按后退按钮,它会回家,但它应该去产品页面。
在这种情况下,如何处理堆叠?谢谢你的帮助。
发布于 2016-01-07 23:57:39
当您在适当的时候更改片段和popBackStack时,您将需要很聪明,以便控制堆栈。下面是我的应用程序中的一个示例(还处理堆栈中现有片段的重用):
// 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()方法是在我的基本片段中实现的,默认实现为:
public String getBackStackName() {
return getClass().getName();
}allowStack标志用于控制在后台是否可以有多个条目。
至于在用户直接导航到详细信息页时插入Product片段,您可能需要这样做。ie:对产品执行替换,然后对产品细节执行替换。希望这段代码片段和链接帖子将帮助您找到所需的解决方案。
发布于 2016-01-07 23:59:55
硬后退按钮将始终遍历堆栈,这是您的用户期望的行为。
如果您正在寻找将您带回到父活动的东西,比如返回到父产品屏幕的Product,那么您可以使用Up按钮函数定义它。从Android站点的Up导航
这样,您就不必尝试清除和管理后台堆栈,只需定义将用户带回父屏幕的项。
https://stackoverflow.com/questions/34667170
复制相似问题