1

我在用什么?
我正在使用 kotlin 编写默认的导航抽屉活动

我的问题
根据图像有一个“三点下拉菜单”:

在此处输入图像描述

当我点击菜单时,很少有函数被调用。不确定正在执行哪一段代码。

我的问题
有很多导航抽屉的教程,但我找不到任何针对特定情况的内容,尤其是对于 kotlin。

抽屉.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />
<item
    android:id="@+id/action_logout"
    android:orderInCategory="100"
    android:title="@string/action_logout"
    app:showAsAction="never" />

Drawer.kt
根据菜单操作,我没有看到任何代码

4

3 回答 3

1

如果我理解正确,您想要处理菜单点击。我不确定这是否与NavigationDrawer. 从随附的屏幕截图中似乎没有。如果是这样,您应该实施onOptionsItemSelected 以处理您想要发生的任何操作,例如:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId) {
            R.id.action_settings -> println("handle me!") return true
        }

        return super.onOptionsItemSelected(item)
    }

您需要返回truefalse指示菜单单击是否由您的代码处理(或不处理)。

于 2020-06-21T17:48:03.620 回答
0

三点菜单是溢出菜单,.DrawerLayout

在你的Activity

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    val toolbar : Toolbar = findViewById(R.id.toolbar)
    setSupportActionBar(toolbar)
    ...
}

然后你必须重写onCreateOptionsMenu()以膨胀你之前定义的菜单资源:

   override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.toolbar_menu, menu)
        return 

最后覆盖onOptionsItemSelected来处理项目菜单上的点击:

   override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId) {
            R.id.action_logout -> //....) return true
        }

        return super.onOptionsItemSelected(item)
    }

在此处输入图像描述 在此处输入图像描述

于 2020-06-21T19:50:47.457 回答
0

您可以在 MainActivity 中覆盖它,以处理菜单项点击

示例代码

override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
    when (menuItem.itemId) {
        R.id.action_settings-> {
            Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show()
            //handle click on settings
        }
        R.id.action_logout-> {
            Toast.makeText(this, "Logout", Toast.LENGTH_SHORT).show()
            //handle click on logout
        }
        
    }
    drawer_layout.closeDrawer(GravityCompat.START) //Closing the drawer
    return true // because you handled the clicks
}
于 2020-06-21T17:36:05.547 回答