android - NavigationView.setNavigationItemSelectedListener 不工作
问题描述
我发布此消息是因为我确实在搜索解决方案,但没有任何效果。我尝试与导航抽屉布局上的菜单中的项目进行交互。我在 Android Studio 上工作,我选择了 Android Studio 制作的 Navigation Drawer 的基本模板。这是我的代码:
public class MenuActivity extends AppCompatActivity{
private AppBarConfiguration mAppBarConfiguration;
private NavigationView navView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
this.navView = navigationView;
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setDrawerLayout(drawerLayout)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(this.navView, navController);
navigationView.setNavigationItemSelectedListener(menuItem -> {
int id=menuItem.getItemId();
if (id == R.id.nav_home) {
Toast.makeText(getApplicationContext(), "Home", Toast.LENGTH_SHORT).show();
}
NavigationUI.onNavDestinationSelected(menuItem,navController);
drawerLayout.closeDrawer(GravityCompat.START);
return true;
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Toast.makeText(getApplicationContext(), "Home", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
}
我试图setNavigationItemSelectedListener
在我的导航视图上放一个来获取单击的菜单项,另外我放了一个 Toast 以确保它的功能很好,但 Toast 从未出现。
完整地说,这是我的 XML :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_camera"
android:title="@string/menu_home" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="@string/menu_gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="@string/menu_slideshow" />
<item
android:id="@+id/nav_connexion"
android:title="@string/connexion" />
</menu>
我还尝试放了一个 ToastonOptionsItemSelected
并且 Toast 工作得很好,所以我不明白为什么 menuItems 上的 Toast 不起作用。
这是我用于设置 Toast 的 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/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>
解决方案
推荐阅读
- db2 - 将 IBM Db2 连接到 Watson Assistant
- html - 我怎样才能摆脱滚动条的白角
- sql-server - 即使 API 正在工作,表格也没有显示行结果
- swift - SwiftUI 侧边栏列表部分应默认折叠
- python - 没有得到可重现的结果 TensorFlow-Keras-Google Collab
- c++ - CMAKE GLFW 链接问题
- specifications - 为什么 TLC 在有效状态上报告错误?
- react-native - React Native:FlatList 闪烁的项目列表很大,而不是较小的列表
- flutter - Dart Analyzer 在 flutter clean 或 flutter run 时终止
- go - 如何为消费者添加 oauthbearer 支持 - 如何刷新 jwt 令牌