Заменить фрагмент на хосте Nav без разрушения - PullRequest
0 голосов
/ 07 апреля 2020

Я использую Android Jetpack Navigation для навигации между фрагментами в моем приложении и с помощью одного основного действия. У меня есть фрагмент узла навигации в основной активности и навигация снизу для навигации между фрагментами.

navController = Navigation.findNavController(this,R.id.nav_host_fragment_container);
BottomNavigationView bottomNavigationView = findViewById(R.id.bot_nav_bar);
NavigationUI.setupWithNavController(bottomNavigationView,navController);

Но у меня есть главная проблема - всякий раз, когда я перемещаюсь к другому фрагменту, текущий фрагмент уничтожается, и когда я перемещаюсь назад он воссоздается вместе с представлением модели. Затем модель представления снова получает данные из хранилища.

Как я могу исправить эту проблему. Я хочу перемещаться между вкладками и загружать другие фрагменты, не разрушая текущий.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы можете сделать это 1. Создайте объект из вашего фрагмента exp:

final Fragment frag1 = new Fragment1();
final Fragment frag2 = new Fragment2();
final Fragment frag3 = new Fragment3();

После этого вам нужно создать объект из FragmentManager следующим образом

final FragmentManager fm = getSupportFragmentManager();
Fragment active = frag1;

наконец добавить фрагмент в fm вот так

fm.beginTransaction().add(R.id.main_container, frag3, 
"3").hide(frag3).commit();
fm.beginTransaction().add(R.id.main_container, frag2, 
"2").hide(frag2).commit();
fm.beginTransaction().add(R.id.main_container,frag1, "1").commit();

хорошо работает, но не забудьте добавить "main_container" в xml file

main_container

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".view.activity.MainActivity"
tools:showIn="@layout/activity_main"
android:id="@+id/main_container">

</FrameLayout>

Теперь нужно добавить в YourActivity

<include
layout="@layout/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

сейчас в действииListener

fm.beginTransaction().hide(active).show(frag3).commit();
active = frag3;
0 голосов
/ 07 апреля 2020

Вы должны создать свой собственный NavHostFragment (). Вот простой пример

https://medium.com/@programmerr47 / navigate-back-with-navigation-component-6cec37ba6964

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