我将NavigationDrawer分为两部分。首先包含带有ID的菜单项,例如"返回","退出"等等。它是使用xml文件创建的。第二个是动态创建的,所以我无法找出任何类型的ID或其他东西。因为它是一个菜单类型的对象,我无法找到一种方法来为第二部分的项目编写正确的监听器。例如:如果我单击第2部分中的第1项,则活动1开始,等等。任何想法?我的代码片段:
创建NavigationDrawer的第二部分'菜单
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Toast.makeText(this, "onActivityResult", Toast.LENGTH_LONG).show();
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK){
arrayFav.clear();
arrayLin.clear();
ArrayList<String> passedText = data.getStringArrayListExtra("text");
ArrayList<String> passedLink = data.getStringArrayListExtra("link");
arrayFav.addAll(passedText);
arrayLin.addAll(passedLink);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
Menu mainMenu = navigationView.getMenu();
final Menu menuWithFavJobs = mainMenu.addSubMenu(Fav jobs: "+mEditTextPraca.getText().toString());
for (int i = 0; i < arrayFav.size(); i++) {
menuWithFavJobs.add(arrayFav.get(i));
}
}
}
}
和我先用过的部分&#39;部分ID以做出一些动作:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_back) {}
else if (id == R.id.nav_export) {
onExportPressed();
}
else if (id == R.id.nav_exit) {
onExitPressed();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
我试过了:
menuWithFavJobs.getItem(i).setOnMenuItemClickListener()...
但它仅适用于带有一个项目的菜单:( 请提供任何提示! :)我必须解决它。
答案 0 :(得分:0)
在for循环中,将项添加到子菜单。您需要保存menuWithFavJobs.add()
的返回值。它返回一个MenuItem
对象。然后你可以打电话:
MenuItem.setOnMenuItemClickListener()
刚刚创建并尝试了它:
Menu mainMenu = navigationView.getMenu();
mainMenu.add("Test OUTER");
Menu subMenu = mainMenu.addSubMenu("SubMenu");
for (int i = 0; i < 5; i++) {
MenuItem item = subMenu.add("Submenu Item " + i);
final int count = i;
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "THIS IS A TEST" + count, Toast.LENGTH_SHORT).show();
return false;
}
});
}
经过测试,效果很好。问题必定出现在代码中的其他地方?