【问题标题】:Do fragments need to be always recreated when exchanging the fragment?交换片段时是否需要始终重新创建片段?
【发布时间】:2019-12-18 08:47:42
【问题描述】:

真的有必要像这段代码那样在底部导航菜单中导航时总是重新创建片段吗?

  @Override
  public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment selectedFragment = null;

                switch (item.getItemId()) {
                    case R.id.nav_home:
                        selectedFragment = new HomeFragment();
                        break;
                    case R.id.nav_favorites:
                        selectedFragment = new FavoritesFragment();
                        break;
                    case R.id.nav_search:
                        selectedFragment = new SearchFragment();
                        break;
                }

                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        selectedFragment).commit();

                return true;
            }
        };

我宁愿在周围 MainActivity 的 onCreate 中创建我所有的 Fragments,并将它们作为成员变量存储在那里。然后我可以在 onNavigationItemSelected 中只使用对我的片段的引用而不是创建新片段。

可以按照描述的方式做而不使用上面的代码吗?还是按照描述的方式进行操作会导致某处出现并发症?

【问题讨论】:

  • 你可以使用单例模式来做到这一点。检查这个答案:stackoverflow.com/questions/14839152/….
  • 使用单例模式,您只会为每个片段创建一个实例,并且会一次又一次地重复使用它们。

标签: android android-fragments buffering android-bottomnav


【解决方案1】:

实际上,在创建时创建它们是最好的方法。此外,有时人们倾向于在创建时添加大量初始化,从长远来看,您的应用可能会在每次需要它们时初始化片段时使用过多的内存。

【讨论】:

  • 我会选择这个答案,因为我的应用程序中没有那么多片段,我希望因此可以忽略其他答案中提到的性能损失。
【解决方案2】:

您必须负责保存片段状态,因此在重新创建时,您的数据将随时可用。你可以试试这样的

https://proandroiddev.com/fragments-swapping-with-bottom-bar-ffbd265bd742

尽管您可以尝试许多方法。

您可以一次创建所有片段并将它们与底部导航交换。但出于明显的导航和性能原因,我不建议这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多