提问人:Shivanshu Raj 提问时间:9/8/2023 更新时间:9/11/2023 访问量:34
溢出菜单在活动中的工具栏上不起作用
Overflow menu not working on toolbar in activity
问:
我已经在 MainActivity 中设置了一个工具栏。我可以创建选项菜单。但是,当我单击该项目时,没有任何反应。我想在单击菜单项时打开一个片段。我正在使用应用导航模式。
我尝试将工具栏设置为supportActionToolbar,但它不起作用。我尝试在工具栏上膨胀菜单,然后使用工具栏的 setOnMenuItemClick 侦听器,但这似乎也不起作用。
代码如下:
MainActivity.java
Toolbar toolbar = binding.toolbar;
toolbar.setTitle("Howdy John Doe !!");
toolbar.setSubtitle("Mumbai");
toolbar.setSubtitleTextColor(getResources().getColor(R.color.white, getTheme()));
toolbar.setTitleTextColor(getResources().getColor(R.color.white, getTheme()));
setSupportActionBar(toolbar);
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId()==R.id.navigation_refine){
Toast.makeText(this, "Hey there", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onOptionsItemSelected: Its working!");
}
return super.onOptionsItemSelected(item);
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/blue_200"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
<fragment
android:id="@+id/nav_host_fragment_activity_main"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>
menu_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/navigation_refine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:showAsAction="always"
app:actionLayout="@layout/custom_menu_layout"
android:icon="@drawable/mdi_format_list_checks"
android:title="Refine" />
</menu>
答:
1赞
Pawan Harariya
9/8/2023
#1
将语句添加到 中的所有条件。它表示您已成功处理菜单项。return true
onOptionsItemSelected()
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId()==R.id.navigation_refine){
Toast.makeText(this, "Hey there", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onOptionsItemSelected: Its working!");
return true; // add this to your code
}
return super.onOptionsItemSelected(item);
}
如果对菜单使用自定义布局,则默认情况下不会调用。因此,您需要实现点击侦听器。您可以按照本教程了解更多详细信息。onOptionsItemSelected()
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
final MenuItem menuItem = menu.findItem(R.id.navigation_refine);
View rootView = menuItem.getActionView();
rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onOptionsItemSelected(menuItem);
}
});
return super.onPrepareOptionsMenu(menu);
}
评论
0赞
Shivanshu Raj
9/8/2023
这个解决方案没有用。
0赞
Pawan Harariya
9/8/2023
单击项目时,屏幕上是否显示“嘿,你好”Toast消息?
0赞
Shivanshu Raj
9/11/2023
此行导致了问题:app:actionLayout=“@layout/custom_menu_layout”。但是,现在我无法对菜单项使用自定义布局。
1赞
Pawan Harariya
9/11/2023
如果您使用的是自定义布局,则默认情况下不会实现。我已经更新了我的答案。ClickListener
评论