Компонент навигационной арки и воссоздание фрагментов - PullRequest
0 голосов
/ 23 октября 2018

Я использовал BottomNavigationView вместе с NavHostFragment, и на данный момент у меня есть только 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 голосов
/ 23 октября 2018

Мой ответ ограничен только 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();

илиВы можете добавить его в backstack согласно вашему требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...