0

我正在尝试创建一个底部导航视图,其中包含四个不同的片段,只需轻按一下图标即可在它们之间切换。为此,我使用了带有导航组件的底部导航视图,并且还制作了导航图 - 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>

请让我知道我应该在代码中添加什么或者我做错了什么?实现该功能的正确方法是什么,即每次单击图标或按钮时不应重新创建或重新加载片段?

4

0 回答 0