【发布时间】:2016-12-22 10:05:22
【问题描述】:
我有片段,比如 CompanyFragment、DashboardFragment、CalendarFragment。 我的默认片段是 CompanyFragment。
预期流量应该是
- 从 CompanyFragment 中选择公司
- 导航到 DashboardFragment
- 从仪表板更改日期以便导航到 CalenderFragment
- 从 CalenderFragment 中选择日期后应该回到 DashboardFragment
现在我在片段管理器上添加了三个片段 CompanyFragment -> DashboardFragment -> CalenderFragment
我正在使用以下代码 sn-p 添加/替换片段
public void setFragmentToContainer(Fragment fragment) {
final String tag = fragment.getClass().getName();
if (manager == null) {
manager = getSupportFragmentManager();
}
transaction = manager.beginTransaction();
if (isFragmentInBackstack(manager, tag)) {
if (fragment instanceof DayPartStoreListingFragment) {
} else {
manager.popBackStackImmediate(tag, manager.POP_BACK_STACK_INCLUSIVE);
}
} else {
// Fragment doesn't exist
}
if (fragment instanceof CalenderFragment) {
transaction.setCustomAnimations(R.anim.slide_up, 0, 0, R.anim.slide_down);
}
if (fragment instanceof DayPartStoreListingFragment) {
transaction.add(R.id.layout_content, fragment, tag);
} else {
transaction.replace(R.id.layout_content, fragment, tag);
}
if (fragment instanceof CompanyLevelFragment) {
//Exit app on back press
} else {
transaction.addToBackStack(tag);
}
transaction.commit();
}
要检查片段管理器中的片段条目,我使用以下代码
public static boolean isFragmentInBackstack(final FragmentManager fragmentManager, final String fragmentTagName) {
for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
if (fragmentTagName.equals(fragmentManager.getBackStackEntryAt(entry).getName())) {
return true;
}
}
return false;
}
问题是: 当我尝试从 CalendarFragment 打开 DashboardFragment 时,第一次调用 CompanyFragment 的 onResume,然后调用 DashboardFragment onResume。 注意:我没有从CalenderFragment调用CompanyFragment,CompanyFragments onResume在DashboardFragmet的onResume之前自动被调用。同样的情况也发生在另一个片段上。日期更改后,首先调用前一个片段的 onResume,然后调用请求的片段的 onResume。
调试后我发现问题在 manager.popBackStackImmediate(tag, manager.POP_BACK_STACK_INCLUSIVE);
如果我从代码中删除此行,则上述场景不会被复制。但我需要这一行来清除 backstack 中相同片段的旧条目。我真的需要帮助。
【问题讨论】:
-
您使用的是哪个版本的支持库?
-
嗨 Posumyambu 我能够解决这个问题..将为此发布相应的答案
-
你能发布你的答案吗?请。
-
请检查,已发布答案
标签: android android-fragments fragment-backstack