MaterialToolbar.onMenuItemClickListener不起作用

时间:2020-10-27 19:11:31

标签: android android-fragments android-toolbar

我正在尝试实现自定义应用栏,目前我有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实现了主题

1 个答案:

答案 0 :(得分:0)

  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语法。

相关问题