我正在使用Android Jetpack导航在我的应用程序中的片段之间导航,并使用一个主要活动。我在主要活动中有一个导航主机片段,并在各个片段之间进行了导航。
navController = Navigation.findNavController(this,R.id.nav_host_fragment_container);
BottomNavigationView bottomNavigationView = findViewById(R.id.bot_nav_bar);
NavigationUI.setupWithNavController(bottomNavigationView,navController);
但是我有一个主要问题-每当我导航到另一个片段时,当前片段都会被销毁,而当我向后导航时,它将与视图模型一起重新创建。然后,视图模型再次从存储库中获取数据。
如何解决此问题。我想在选项卡之间导航并加载其他片段,而又不破坏当前片段。
答案 0 :(得分:1)
您必须创建自定义的NavHostFragment()。
https://medium.com/@programmerr47/navigate-back-with-navigation-component-6cec37ba6964
答案 1 :(得分:0)
您可以做到 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();
工作正常,但不要忘记在xml文件中添加“ main_container”
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"
/>
现在在actionListener中
fm.beginTransaction().hide(active).show(frag3).commit();
active = frag3;