NavigationDrawer菜单按位置选择的项目

时间:2016-01-17 01:13:56

标签: android onclicklistener menuitem android-navigation-drawer

我将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()...

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

1 个答案:

答案 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;
        }
    });
}

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