android - 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 实现了主题
解决方案
- 确保您已将工具栏设置为您的支持操作栏。在您的活动中的 onCreate 中,添加
Toolbar timeline_toolbar = (Toolbar) findViewById(R.id.timeline_toobar);
setSupportActionBar(timeline_toolbar);
- 在您的活动中覆盖 onCreateOptionsMenu()。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.your_menu, menu);
return true;
}
- 移动此代码位
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 语法。
推荐阅读
- docker - 在 docker 上运行的 Gitlab 社区 - Heathcheck
- python - 如何在 python-socketio 上发送消息
- android-studio - 如何确定 Android Studio 中方法调用(或特定行)代码的数量?
- c# - 如何从 xml 文件中读取多个属性
- java - 我们如何编辑 Java 内置类,例如 Java.util.Scanner?
- java - ActionListener 按钮什么都不做
- javascript - 使用 AJAX 和按钮提交的 Flask 上传文件不起作用
- css - 用线悬停挥动
- flutter - 如何在 Flutter Tabs 中添加圆点作为指示器?
- java - 将资源文件捆绑到 ecs 集群上使用的 java app jar 文件中