导航拱形组件和碎片娱乐

时间:2018-10-23 10:57:25

标签: android android-architecture-components android-architecture-navigation

我同时使用了BottomNavigationViewNavHostFragment,目前只有2个标签,低于我使用的导航图

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/main_navigation"
  app:startDestination="@id/fragment1">

  <fragment
    android:id="@+id/fragment1"
    android:name="something.ListingFragment"
    android:label="@string/hello" />

  <fragment
    android:id="@+id/fragment2"
    android:name="something.ListingFragment2"
    android:label="@string/Hi" />

</navigation>

BottomNavigation菜单为:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">
  <item
    android:id="@id/fragment1"
    android:icon="@drawable/ic1"
    android:title="@string/hello"
    tools:showAsAction="ifRoom" />
  <item
    android:id="@id/fragment2"
    android:icon="@drawable/ic2"
    android:title="@string/hi"
    tools:showAsAction="ifRoom" />

所有设置都使用:

val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
    val navHostFragment = supportFragmentManager.findFragmentById(R.id.navigation_host_fragment) as NavHostFragment
    NavigationUI.setupWithNavController(bottomNavigationView, navHostFragment.navController)

问题是,每次我在选项卡之间切换时,都会创建一个我单击的选项卡片段的新实例,是否有一种方法可以管理这种情况,以防止在内存中已经存在新项的情况下创建新项?

1 个答案:

答案 0 :(得分:-1)

我的回答仅限于Java。但是您会明白的:

单击BottomNavigationView尝试按id查找片段,如果该片段存在于内存中,则无需创建一个片段,

ListingFragment listingFragment
if (findViewById(R.id.fragment1) != null) {
 listingFragment  = findViewById(R.id.fragment1);
}
// if the listing fragment is null then create new one
else{
  listingFragment = new ListingFragment();
}
 getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();

或者您可以根据需要将其添加到堆栈中。