我正在尝试创建一个底部导航视图,其中包含四个不同的片段,只需轻按一下图标即可在它们之间切换。为此,我使用了带有导航组件的底部导航视图,并且还制作了导航图 - nav_graph.xml并连接了主要活动中的所有结构。但是当我单击图标两次或单击另一个项目后,片段的元素(即回收器视图和数据)或整个片段正在重新创建。我希望当我点击图标两次或点击导航栏项目时,它不应该重新创建片段,这样数据就不会被多次加载。
下面是我的MainActivity.kt类文件 -
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// toolbar setup
setSupportActionBar(findViewById(R.id.toolbar))
supportActionBar?.setDisplayHomeAsUpEnabled(true)
// bottom nav bar setup
val bottomNavController = findViewById<BottomNavigationView(R.id.bottomNavigationView)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as
NavHostFragment
val navController = navHostFragment.navController
bottomNavController.setupWithNavController(navController)
}
}
下面是我的nav_graph.xml文件 -
<?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/nav_graph"
app:startDestination="@id/home2">
<fragment
android:id="@+id/home2"
android:name="com.redoven.cryptomatic.Fragments.Home"
android:label="Home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/conversionFragment"
android:name="com.redoven.cryptomatic.Fragments.ConversionFragment"
android:label="Conversion"
tools:layout="@layout/fragment_conversion" />
<fragment
android:id="@+id/profitFragment"
android:name="com.redoven.cryptomatic.Fragments.ProfitFragment"
android:label="Profit"
tools:layout="@layout/fragment_profit" />
<fragment
android:id="@+id/newsFragment"
android:name="com.redoven.cryptomatic.Fragments.NewsFragment"
android:label="News"
tools:layout="@layout/fragment_news" />
</navigation>
下面是我的activity_main.xml文件 -
<androidx.drawerlayout.widget.DrawerLayout
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"
tools:context=".MainActivity"
android:id="@+id/drawer_layout">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/nav_bar_menu" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="765dp"
app:defaultNavHost="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/nav_graph" />
</androidx.drawerlayout.widget.DrawerLayout>
下面是我的menu_item.xml文件 -
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/home2"
android:title="Home"
android:icon="@drawable/ic_baseline_dashboard_24"/>
<item
android:id="@+id/newsFragment"
android:title="News"
android:icon="@drawable/ic_baseline_chrome_reader_mode_24"/>
<item
android:id="@+id/profitFragment"
android:title="Profit"
android:icon="@drawable/ic_baseline_bar_chart_24"/>
<item
android:id="@+id/conversionFragment"
android:title="Conversion"
android:icon="@drawable/ic_baseline_compare_arrows_24"/>
</menu>
请让我知道我应该在代码中添加什么或者我做错了什么?实现该功能的正确方法是什么,即每次单击图标或按钮时不应重新创建或重新加载片段?