如何停止操作栏菜单片段重新膨胀

时间:2019-11-10 19:34:06

标签: android xml kotlin preferences

我按照本指南创建了设置片段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>

0 个答案:

没有答案
相关问题