首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onResume呼吁“死”碎片-如何正确恢复?

onResume呼吁“死”碎片-如何正确恢复?
EN

Stack Overflow用户
提问于 2016-12-29 16:33:59
回答 1查看 258关注 0票数 1

我用支持库中的片段开发了一个应用程序。我只使用一种活动。该布局由具有折叠工具栏布局和导航视图的协调器布局组成。在选择导航项时,我在NavigationItemSelectedListener中执行以下操作:

代码语言:javascript
复制
switch (item.getItemId()) {
                default:
                    return false;
                case R.id.mainmenu_start:
                    navi.clear();
                    navi.navigate(new StartFragment(), R.id.fragment_container);
                    return true;
                // ... More menu entries
            }

因此,在选择新项时,我清除了Back堆栈(navi.clear()),并将显示的片段替换为新的片段。

我遇到的问题是:“旧”(替换)片段不会被删除/分离

因此,当我导航到StartFragment,然后导航到另一个片段,然后再选择StartFragment时,onResume会被调用两次:

一次在“旧”/第一次StartFragment,一次在新创建的。

我怎样才能避免这种行为?我要么想重用现有的片段(第一个),要么创建一个新的片段-但是使用这两者会导致大量的问题.

为了研究这种行为,我给了每个片段一个唯一的(增量) ID:当导航到新片段时,会在几个旧片段上调用onResume,但不是所有的片段都被调用。

例如:我总是为导航选择相同的菜单项。这是发生的“事件”,其中的数字表示片段ID (所有片段都是同一个类(StartFragment)):

  1. 创建1,简历1
  2. 创建2,简历1,简历2
  3. 创建3,简历1,简历3
  4. 创建4,简历2,简历3,简历4

因此,有时“旧”碎片丢失,并回来晚些。有时还会调用完全不同的片段来调用onResume。(因此,当我在前面打开片段2时,在创建新的片段1.时,也会调用片段2上的onResume。)

表示完备性

导航功能:

代码语言:javascript
复制
public void clear() {
    FragmentManager fragmentManager = ((MainActivity)context).getSupportFragmentManager();
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}



public void navigate(Fragment fragment, int container, HashMap<String, Pair<String, View>> sharedElements) {
    this.hideKeyboard();
    FragmentTransaction ft = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
    ft.replace(container, fragment);
    ft.addToBackStack(null);
    ft.commit();
    ((MainActivity)context).getDrawerLayout().closeDrawers();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-30 06:13:24

张贴作为一个答案,供日后参考。

我认为您的问题是,popBackStack()没有立即生效,而是计划在下一个事件循环pass上运行,在您的情况下,这已经太晚了,并且会产生不想要的效果。应该帮助的是迫使碎片管理器事务不间断地完成。

它可以通过调用executePendingTransactions()或在这种情况下通过popBackStackImmediate()实现。

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

https://stackoverflow.com/questions/41383642

复制
相关文章

相似问题

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