按位置选择的 NavigationDrawer 菜单项

NavigationDrawer Menu Item selected by position

我已将 NavigationDrawer 分成两部分。首先包含带有 ID 的菜单项,例如 "back"、"exit" 等。它是使用 xml 文件创建的。第二个是动态创建的,所以我无法找出任何类型的 ID 或其他东西。因为它是一个菜单类对象,所以我想不出一种方法来为第二部分中的项目编写一个合适的监听器。例如:如果我单击第 2 部分中的项目 1,activity 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));
                }
            }
        }
    }

以及我使用第一个“部分 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()...

但它只适用于只有一项的菜单:( 请提供任何提示! :) 我必须解决它。

在您的 for 循环中,它将项目添加到您的子菜单。您需要保存 menuWithFavJobs.add() 的 return 值。它 return 是一个 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;
        }
    });
}

经过测试,效果很好。问题一定出现在您代码的其他地方?