Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
289 views
in Technique[技术] by (71.8m points)

android - Navigation drawer not showing up. AM I understand it right?

I'm making slidable menu and hamburger icon/sliding not working. I'm also not sure if this working how i think: when we are setting FragmentContainerView like this

    <androidx.fragment.app.FragmentContainerView
        app:navGraph="@navigation/nav_graph"

We are refer to Fragment set in navigation manager, am I right?

Code:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                    .replace(R.id.container, EggTimerFragment.newInstance())
                    .commitNow()
        }

        val navHostFragment =
            supportFragmentManager.findFragmentById(R.id.nav_graph) as NavHostFragment
        val navController = navHostFragment.navController
        findViewById<NavigationView>(R.id.nav_view)
            .setupWithNavController(navController)
        val appBarConfiguration = AppBarConfiguration(navController.graph, binding.drawerLayout)

        NavigationUI.setupActionBarWithNavController(this, navController, binding.drawerLayout)
        NavigationUI.setupWithNavController(binding.navView, navController)

        binding.navView.setNavigationItemSelectedListener {
            when(it.itemId){
                R.id.item1 -> Toast.makeText(applicationContext, "item1 clicked", Toast.LENGTH_SHORT).show()
            }
            true
        }

        super.onCreate(savedInstanceState)
    }
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if(toggle.onOptionsItemSelected(item)){
            return true
        }
        return onOptionsItemSelected(item)
    }

XML main_activity file:

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

<androidx.drawerlayout.widget.DrawerLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".app.MainActivity">
    <androidx.fragment.app.FragmentContainerView
        app:navGraph="@navigation/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:id="@+id/myNavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        />
<com.google.android.material.navigation.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:headerLayout="@layout/nav_header"
    app:menu="@menu/nav_header_menu"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"/>

</androidx.drawerlayout.widget.DrawerLayout>
</layout>

Maybe I should cut some code and move it to fragment? Android guide is too briefly and unclear for me.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Please make this following changes:

  1. Add android:fitsSystemWindows="true" to <androidx.drawerlayout.widget.DrawerLayout>

  2. In your MainActivity override onSupportNavigateUp() method

  3. Initialize data Binding like this: val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)

  4. Also there is no need for this code. Please remove it. As all the navigation should be managed by navigation graph. if (savedInstanceState == null) { supportFragmentManager.beginTransaction() .replace(R.id.container, EggTimerFragment.newInstance()) .commitNow() }

  5. I understand the Android Guide is too brief but you can refer to this particular section: Add a navigation drawer


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...