应该在后台堆栈中使用碎片

时间:2016-02-15 16:10:03

标签: android performance android-fragments navigation-drawer android-orientation

我知道我可以使用Fragment并将其添加到后台堆栈中,如下所示:

Fragment fragment = MyFragment.newInstance();
getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_holder, fragment).addToBackStack("my_fragment").commit();

然后我可以处理onBackStackChanged中的更改:

@Override
public void onBackStackChanged() {
    boolean hasBackStack = getSupportFragmentManager().getBackStackEntryCount() > 0;
    handleBackStackChanges(hasBackStack);
}

但我有一个唠叨的问题是我是否

这个问题的最初原因是我希望实现持久性导航抽屉。即使导航抽屉图标(汉堡包图标)不存在,也可以在应用程序内的任何位置使用,并从屏幕左边缘轻​​扫。

这让我有两个选择;首先,我可以拥有一个Activity个导航抽屉并托管所有Fragments,或者我可以拥有多个Activities,每个onBackStackChanged都包含一个导航抽屉。

最初我被第一个选项所吸引,考虑到navigation drawer sample使用每个抽屉选项的片段。此方法还允许我在public void handleBackStackChanges(boolean hasBackStack) { ObjectAnimator.ofFloat(mDrawerArrow, "progress", hasBackStack ? 0 : 1).start(); ... }

中轻松实现导航抽屉图标动画
MainActivity

但样本基本上是一个平坦的"应用程序,它不会处理任何后备堆栈更改(除了返回Activity,它没有导航抽屉)。经过进一步的开发,我遇到了使用单Toolbar的一些困难。特别是在处理方向更改时,以及Activities内的更改。

所以现在我认为使用多个Activity可能更简单。每个NavigationDrawerActivity都会扩展自定义MainAcitivity。每个导航抽屉项Fragment都有一个Activity。然后,每个后续Fragments(从MainActivity中的NavigationDrawer之一调用)将拥有自己的Activity,并引用原始(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4} 导航抽屉项{ {1}}在。

我可以看到这条路线也出现了自己的问题。处理导航抽屉图标动画,并在从抽屉中选择项目时处理后堆栈。

我的问题基本上是这样的:有没有人遇到过这些问题,是否有更具体的解决方案?在选择一个选项而不是另一个选项时,是否存在可能遇到的问题(性能相关或其他方面)?

0 个答案:

没有答案