当前位置: 首页 > 知识库问答 >
问题:

如何在每次不重新创建片段的情况下在片段之间切换?

充普松
2023-03-14

当使用底部导航视图在片段之间切换时,每次按下按钮时都会重新创建片段。

这是我的代码:

private boolean loadFragment(Fragment fragment) {
    //switching fragment
    if (fragment != null) {
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.fragmentguest, fragment)
                .commit();
        return true;
    }
    return false;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
     Fragment fragment = null;

    switch (item.getItemId()) {
        case R.id.eventsguest:
            fragment = new Events();
            break;
        case R.id.about_usguest:
            fragment = new About_Us();
            break;
    }

    return loadFragment(fragment);
}

共有2个答案

楚望
2023-03-14

不要每次都创建片段(frament=new Events();)您可以在对象字段中保留这两个片段的引用,并在您的onNavigationItemSelec方法中返回已经创建的片段。
或者您可以将ViewPagerBottomNavigationView结合起来。参考这篇文章,如果您对ViewPager了解不多。参考这个。

劳英华
2023-03-14

replace方法会销毁片段。一种解决方法是将其设置为可见性。过去,另一种(不太容易的)方法是将它们保存在变量中。如果这样做,请确保不会左右泄漏内存。

梅雷德里卡在这里回答了这个问题

 类似资料:
  • 我正在开发一个android应用程序,它使用导航抽屉在两个片段之间切换。然而,每次我切换时,片段都会被完全重新创建。 这是我主要活动的代码。 我设置了一些调试日志记录,每次调用selectItem时,都会销毁一个片段,而创建另一个片段。 有什么方法可以防止碎片被重新创建,而只是重复使用它们吗?

  • 我尝试在片段子类中使用onSaveInstanceState(Bundle outState)方法保存数据。 解释:我创建了一个类FragmentA,它扩展了这个类中的Fragment。我有一个变量名count,当我单击按钮时,count的值发生了变化(最初count=0)。我想保存count的值,即使方向发生了变化(纵向到横向,反之亦然)。我的MainActivity类动态加载片段。 我的代码:

  • 我有一个带有底栏的main_activity。我正在使用这个底栏在片段之间导航。然而,有一个片段不能通过底部栏直接导航。它必须通过MapView和从片段中访问。然而,每当我使用InfoWindow时,该应用程序就会崩溃。这是我的代码 异常:main process:com.teslaqubitsins.fasih.teslahcm,pid:2573 java.lang.nullpointerexc

  • 我正在进行一项活动,其中有TabLayout和两个表示选项卡内容的片段。我在活动的OnCreate方法中手动管理打开选项卡的当前状态: 这只是一个简单的例子。我真正的代码是用C语言编写的,并且有一些其他逻辑来存储和管理活动重启之间的状态。 配置更改时的问题(例如开关方向): 打开的碎片被摧毁 活动被破坏 活动重启 在onCreate方法中,当调用super.onCreate(savedInstan

  • 我在android中使用BottomNavigationView来制作一个像Instagram一样的应用程序。我在NavigationTabs中使用片段。应用程序有5个标签初始我已经设置为活动标签的中间标签和加载它一旦应用程序启动。当我单击任何其他选项卡时,就会进行网络调用并加载数据。现在,当我按下on back按钮或再次单击last选项卡(在启动时加载)时,片段将被重新创建,并进行网络调用以加载

  • 如何从secondactivity.java中的包到fragment_2.java文件中获取值?