交换片段时是否需要始终重新创建片段?

Do fragments need to be always recreated when exchanging the fragment?

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

  @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 中创建我的所有片段并将它们作为成员变量存储在那里。然后我可以在 onNavigationItemSelected 中只使用对我的片段的引用而不是创建新的片段。

不使用上面的代码,按照说明去做可以吗?或者按照描述的那样做会不会在某处引起并发症?

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

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

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

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

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