NavigationView,多个菜单

时间:2015-12-05 23:50:52

标签: android xml

我试图在我的一个项目中使用NavigationView来实现侧面菜单。该应用有两种类型的用户:管理员和用户。

我创建了登录活动,我以用户或管理员身份登录。我将名称,电子邮件通过intent(putExtra)传递给我的NavigationActivity。

由于我有两种类型的用户,我创建了两种类型的菜单(管理员有更多菜单选项)。

我从意图中检查传递的值的内容,并相应地膨胀导航视图菜单。

我的问题是我不知道如何在听众中分离两种类型的菜单。我应该在每个案例中为我的if else创建两个听众吗?什么是正确的方法?我这样做的方式不能正常工作,在我的旁边菜单中,我有用户菜单中的前两项,然后是管理菜单中的重新项目。

这里是代码:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation);
        Bundle extras = getIntent().getExtras();
        String name = extras.getString("name");
        String email = extras.getString("email");
        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        setSupportActionBar(toolbar);

        navigationView = (NavigationView) findViewById(R.id.navigation_view);
        if(name.equals("admin")){
        // listener for admin here?
            navigationView.inflateMenu(R.menu.admin_drawer);
        }else{
        // listener for user here?
            navigationView.inflateMenu(R.menu.user_drawer);
        }
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            // questionable part here, doesn't work correctly 
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                if(item.isChecked())
                    item.setChecked(false);
                drawerLayout.closeDrawers();
                switch (item.getItemId()){
                    // this is for user
                    case R.id.test:
                        Toast.makeText(getApplicationContext(), "Test Selected", Toast.LENGTH_SHORT).show();
                        TestFragment testFragment = new TestFragment();
                        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                        fragmentTransaction.replace(R.id.frameholder, testFragment);
                        fragmentTransaction.commit();
                        return true;
                    // this is for user
                    case R.id.practice:
                        Toast.makeText(getApplicationContext(),"Practice Selected",Toast.LENGTH_SHORT).show();
                        break;
                    // this is for admin  
                    case R.id.existing_questions:
                        Toast.makeText(getApplicationContext(),"Questions Selected",Toast.LENGTH_SHORT).show();
                        break;
                    // this is for admin
                    case R.id.new_questions:
                        Toast.makeText(getApplicationContext(),"New questions Selected",Toast.LENGTH_SHORT).show();
                        break;
                    // this is for admin 
                    case R.id.settings:
                        Toast.makeText(getApplicationContext(),"Settings Selected",Toast.LENGTH_SHORT).show();
                        break;
                    // this is for admin
                    case R.id.users_data:
                        Toast.makeText(getApplicationContext(),"User data Selected",Toast.LENGTH_SHORT).show();
                        break;
                }
                return true;
            }
        });

编辑:

这里有我使用的两个菜单: admin_drawer.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/existing_questions"
            android:checked="false"
            android:icon="@drawable/ic_existq"
            android:title="Questions" />
        <item
            android:id="@+id/new_questions"
            android:checked="false"
            android:icon="@drawable/ic_addq"
            android:title="Add question" />
        <item
            android:id="@+id/settings"
            android:checked="false"
            android:icon="@drawable/ic_settings"
            android:title="Settings" />
        <item
            android:id="@+id/users_data"
            android:checked="false"
            android:icon="@drawable/ic_statistics"
            android:title="Statistics" />


    </group>
</menu>

user_drawer.xml

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/test"
            android:checked="false"
            android:icon="@drawable/ic_test"
            android:title="Test" />
        <item
            android:id="@+id/practice"
            android:checked="false"
            android:icon="@drawable/ic_practice"
            android:title="Practice" />
    </group>
</menu>

2 个答案:

答案 0 :(得分:0)

谢谢cylon。这个错误是我做的。我在xml中膨胀导航视图,然后从代码膨胀到。

答案 1 :(得分:0)

一个好的方法是在同一菜单中使用两个具有不同ID的组。然后你可以使用 .setGroupVisible()轻松地在它们之间切换:

if(name.equals("admin")){    
  navigationView.menu.setGroupVisible(R.id.menu_group_admin, true);
  navigationView.menu.setGroupVisible(R.id.menu_group_user, false);
}
else{
  navigationView.menu.setGroupVisible(R.id.menu_group_admin, false);
  navigationView.menu.setGroupVisible(R.id.menu_group_user, true);
}

这无缝地工作