Я пытаюсь использовать 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>
Ваша проблема не относится к слушателям, вероятно, вы раздули экране навигации в два раза, с различными макетами меню. – cylon
Действительно, спасибо. –