Как остановить повторное раздувание фрагментов меню панели действий - PullRequest
0 голосов
/ 10 ноября 2019

Я следовал этому руководству, чтобы создать свой фрагмент настроек. https://developer.android.com/guide/topics/ui/settings

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

Я довольно новичок, поэтому я не уверен, что лучше всего прекратить это или я делаю что-то не так с навигационным контроллером, так как я использую его впервые.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navView: BottomNavigationView = findViewById(R.id.nav_view)

        val navController = findNavController(R.id.nav_host_fragment)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home, R.id.navigation_speedtest, R.id.navigation_about
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)

        findViewById<BottomNavigationView>(R.id.nav_view)
            .setupWithNavController(navController)

        navController.addOnDestinationChangedListener { _, destination, _ ->
            when (destination.id) {
                R.id.settingsFragment -> hideBottomNav()
                else -> showBottomNav()
            }
        }
    }

    private fun showBottomNav() {
        nav_view.visibility = View.VISIBLE
    }

    private fun hideBottomNav() {
        nav_view.visibility = View.GONE
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here.
        val navController = findNavController(R.id.nav_host_fragment)
        return when (item.itemId) {
            R.id.action_credits -> {
                navController.navigate(R.id.creditsActivity)
                true
            }
            R.id.action_settings -> {
                navController.navigate(R.id.settingsFragment)
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/settings_container"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.actionbar.settings.SettingsActivity">

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <PreferenceCategory
        app:iconSpaceReserved="false"
        app:title="Theme">

        <SwitchPreferenceCompat
            app:iconSpaceReserved="false"
            app:key="switch"
            app:summary="Enable dark theme."
            app:title="Dark Theme" />
    </PreferenceCategory>

</androidx.preference.PreferenceScreen>
<?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/mobile_navigation"
    app:startDestination="@id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.shortcircuit.online.ui.bottomnavbar.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/navigation_speedtest"
        android:name="com.shortcircuit.online.ui.bottomnavbar.speedtest.SpeedTestFragment"
        android:label="@string/title_speed_test"
        tools:layout="@layout/fragment_speed_test" />

    <fragment
        android:id="@+id/navigation_about"
        android:name="com.shortcircuit.online.ui.bottomnavbar.about.AboutFragment"
        android:label="@string/title_about"
        tools:layout="@layout/fragment_about" />
    <activity
        android:id="@+id/creditsActivity"
        android:name="com.shortcircuit.online.ui.actionbar.credits.CreditsActivity"
        android:label="@string/title_credits"
        tools:layout="@layout/activity_settings"/>
    <fragment
        android:id="@+id/settingsFragment"
        android:name="com.shortcircuit.online.ui.actionbar.settings.SettingsFragment"
        android:label="@string/title_settings"/>
</navigation>
...