2015-12-05 4 views
0

Я пытаюсь использовать NavigationView в одном из моих проектов для реализации бокового меню. Приложение имеет двух типов пользователей: Admin и User.NavigationView, несколько меню

Я создал учетную запись, и я вхожу в систему как пользователь или администратор. Я передаю имя, адрес электронной почты с помощью намерения (putExtra) в мою NavigationActivity.

Поскольку у меня есть два типа пользователей, я создал два типа меню (у администратора больше опций меню).

Я проверяю содержимое переданного значения с намерением и раздувает меню видов просмотра соответственно.

Моя проблема: я не знаю, как разделить в слушателе два типа меню. Должен ли я создать в моем, если еще два слушателя для каждого случая? Каким будет правильный подход? То, как я это делал, не работает правильно, в моем боковом меню у меня есть первые два элемента из меню пользователя, а после этого - элементы меню администратора.

Вот thecode:

@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; 
      } 
     }); 

Edit:

Здесь у вас есть два меню, которые я использую: 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> 
+1

Ваша проблема не относится к слушателям, вероятно, вы раздули экране навигации в два раза, с различными макетами меню. – cylon

+0

Действительно, спасибо. –

ответ

0

Спасибо, Циклон. Ошибка была сделана мной. Я раздул навигационное представление в xml, а затем от кода до.

0

Хорошим подходом было бы использовать две группы с разными идентификаторами в том же меню. После этого вы можете переключаться между ними с Исли .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); 
} 

Это работает плавно

Смежные вопросы