操作栏抽屉开关在AppBar上显示但不工作?



我创建了一个名为BaseActivity的类,所有的活动都继承自它,这样我就可以在所有的活动中添加抽屉布局。

抽屉切换按钮显示在AppBar,但当我点击它什么都没有发生!

下面是BaseActivity.kt的代码:
open class BaseActivity : AppCompatActivity() {
private var dl: DrawerLayout? = null
private var t: ActionBarDrawerToggle? = null
private var nv: NavigationView? = null
  override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
     setContentView(R.layout.base_activity)
     dl = findViewById(R.id.drawer_layout)
     t = ActionBarDrawerToggle(this, dl,  R.string.drawer_open, R.string.drawer_close)
      supportActionBar?.setDisplayShowTitleEnabled(true);
      supportActionBar?.setHomeButtonEnabled(true);
      supportActionBar?.setDisplayHomeAsUpEnabled(true);
     dl?.addDrawerListener(t!!)
     t?.syncState()
     nv = findViewById(R.id.navigation_view)
    nv?.setNavigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.nav_note -> Toast.makeText(this@BaseActivity, "My Account", Toast.LENGTH_SHORT).show()
            R.id.nav_calendar -> Toast.makeText(this@BaseActivity, "Settings", Toast.LENGTH_SHORT).show()
            R.id.nav_trash -> Toast.makeText(this@BaseActivity, "Trash", Toast.LENGTH_SHORT).show()
            else -> return@OnNavigationItemSelectedListener true
        }
        true
    })
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return if (t?.onOptionsItemSelected(item) == true) {
        true
    } else super.onOptionsItemSelected(item!!)
}

}

这里是base_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BaseActivity">
<!--include layout="@layout/toolbar"/-->
<com.google.android.material.navigation.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_menu"
    app:headerLayout="@layout/nav_header"/>
</androidx.drawerlayout.widget.DrawerLayout>

对于样式,我把它留在DarkActionBar。这是它的样子不要介意那里写了什么

我仍然不明白是什么错了,为什么它不工作。我感谢来自社区的任何建议。谢谢你。

所以我把我的代码改成了这个,它可以工作了这是baseactivity类的新代码

open class BaseActivity : AppCompatActivity() {
    //var toolbar: Toolbar? = null
    var drawerLayout: DrawerLayout? = null
    var drawerToggle: ActionBarDrawerToggle? = null
    var navigationView: NavigationView? = null
    var mContext: Context? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mContext = this@BaseActivity
        setContentView(R.layout.base_activity)
    }
    override fun setContentView(layoutResID: Int) {
        val fullView = layoutInflater.inflate(R.layout.base_activity, null) as DrawerLayout
        val activityContainer = fullView.findViewById<View>(R.id.activity_content) as FrameLayout
        layoutInflater.inflate(layoutResID, activityContainer, true)
        super.setContentView(fullView)
    }

    private fun setUpNav() {
        drawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
        drawerToggle = ActionBarDrawerToggle(
            this@BaseActivity,
            drawerLayout,
            R.string.app_name,
            R.string.app_name
        )
        drawerLayout!!.setDrawerListener(drawerToggle)
        supportActionBar!!.setHomeButtonEnabled(true)
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)
        navigationView = findViewById<View>(R.id.navigation_view) as NavigationView

        // Setting Navigation View Item Selected Listener to handle the item
        // click of the navigation menu
        navigationView!!.setNavigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener { menuItem -> // Checking if the item is in checked state or not, if not make
            // it in checked state
            if (menuItem.isChecked) menuItem.isChecked = false else menuItem.isChecked = true
            // Closing drawer on item click
            drawerLayout!!.closeDrawers()
            // Check to see which item was being clicked and perform
            // appropriate action
            val intent_calendar = Intent(this, CalendarActivity::class.java)
            val intent_add_note = Intent(this, AddActivity::class.java)
            val intent_note = Intent(this, MainActivity::class.java)
            when (menuItem.itemId) {
                R.id.nav_note -> this.startActivity(intent_note)
                R.id.nav_calendar -> this.startActivity(intent_calendar)
                R.id.nav_trash -> Toast.makeText(this, "Trash", Toast.LENGTH_SHORT).show()
                R.id.nav_add_note -> this.startActivity(intent_add_note)
                else -> return@OnNavigationItemSelectedListener true
            }
            false
        })
        // calling sync state is necessay or else your hamburger icon wont show
        // up
        drawerToggle!!.syncState()
    }
    public override fun onPostCreate(savedInstanceState: Bundle?) {
        super.onPostCreate(savedInstanceState)
        setUpNav()
        drawerToggle!!.syncState()
    }
    override fun onConfigurationChanged(newConfig: Configuration) {
        if (newConfig != null) {
            super.onConfigurationChanged(newConfig)
        }
        drawerToggle!!.onConfigurationChanged(newConfig)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return if (drawerToggle?.onOptionsItemSelected(item) == true) {
            true
        } else super.onOptionsItemSelected(item!!)
    }
}

,这里是它的xml

的代码
<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BaseActivity"
    >
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <FrameLayout
            android:id="@+id/activity_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/drawer_menu"
        app:headerLayout="@layout/nav_header"/>
</androidx.drawerlayout.widget.DrawerLayout>

这是对我有帮助的答案,(我没有使用工具栏,我把样式留给了" theme . apppte . light . darkactionbar ") https://stackoverflow.com/a/42533759/15018682

相关内容

  • 没有找到相关文章

最新更新