【问题标题】:OnClickListener for Menu Items in Navigation Drawer Activity导航抽屉活动中菜单项的 OnClickListener
【发布时间】:2020-06-21 17:28:56
【问题描述】:

我在用什么?
我正在使用 kotlin

编写默认导航抽屉活动

我的问题
每张图片都有一个“三点下拉菜单”:

单击菜单时调用的函数很少。不确定正在执行哪段代码。

我的问题
Navigation Drawers 有很多教程,但我找不到任何针对特定情况的教程,尤其是对于 kotlin。

drawer.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
根据菜单操作,我没有看到任何代码

【问题讨论】:

    标签: android kotlin navigation-drawer android-toolbar menu-items


    【解决方案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 以表明您的代码是否处理了菜单点击。

    【讨论】:

    • 啊,可能是,我是手动输入代码的。您可能需要重新格式化并在 print 和 return stamtents 周围添加{}
    【解决方案2】:

    三点菜单是overflow menu,与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来处理item menu的点击:

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

    【讨论】:

    • 第一段代码是因为模板而完成的。但最后一段代码工作得很好。
    【解决方案3】:

    您可以在 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2015-11-04
      相关资源
      最近更新 更多