首页 > 解决方案 > MaterialToolbar.onMenuItemClickListener 不工作

问题描述

我正在尝试实现一个自定义应用栏,目前我有 1 个活动并使用导航组件访问不同的片段。

无论我做什么,我都无法访问项目的点击监听器

这是我的 XML

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/timeline_app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/timeline_toolbar"
            style="@style/Widget.MaterialComponents.Toolbar.Primary"
            android:elevation="@dimen/_8dp"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:menu="@menu/timeline_menu" />

    </com.google.android.material.appbar.AppBarLayout>

这是用于获取侦听器事件的方法

private fun handleActionBar() {
    timeline_toolbar?.setOnMenuItemClickListener {
        when (it.itemId){
            R.id.search_action -> {
                //search clicked
                true
            }
            R.id.logout_action -> {
                //logout clicked
                true
            }
            else -> false
        }
    }
}

我一直在关注https://material.io/develop/android/components/app-bars-top 并且我确实使用 NoActionBar 实现了主题

标签: androidandroid-fragmentsandroid-toolbar

解决方案


  1. 确保您已将工具栏设置为您的支持操作栏。在您的活动中的 onCreate 中,添加
Toolbar timeline_toolbar = (Toolbar) findViewById(R.id.timeline_toobar);
setSupportActionBar(timeline_toolbar);
  1. 在您的活动中覆盖 onCreateOptionsMenu()。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.your_menu, menu);
    return true;
}
  1. 移动此代码位
timeline_toolbar?.setOnMenuItemClickListener {
        when (it.itemId){
            R.id.search_action -> {
                //search clicked
                true
            }
            R.id.logout_action -> {
                //logout clicked
                true
            }
            else -> false
        }
    }

到您在同一活动中的 onCreate。注意:我用 Java 编码是因为我不太了解 Kotlin 语法。


推荐阅读