Пожалуйста, кто-нибудь может помочь мне с фрагментами из ящика навигации, по какой-то причине я не могу заставить их работать, и весь код выглядит правильно.onNavigationItemSelected не работает в NavigationView
Here - ссылка на исходный код.
Пожалуйста, кто-нибудь может помочь мне с фрагментами из ящика навигации, по какой-то причине я не могу заставить их работать, и весь код выглядит правильно.onNavigationItemSelected не работает в NavigationView
Here - ссылка на исходный код.
Посмотрите на ваш MainActivity.java
.
Вы реализовали обратные вызовы для NavigationView.OnNavigationItemSelectedListener
в MainActivity
, как показано ниже,
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// blah blah
}
Также проверьте метод setupDrawerContent
.
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
drawerLayout.closeDrawers();
return true;
}
});
}
В этом методе вы создаете локальную сеть OnNavigationItemSelectedListener
.
Таким образом, вы не используете OnNavigationItemSelectedListener
, который вы переопределили в MainActivity
.
Решение заключается в использовании this
в качестве аргумента для setNavigationItemSelectedListener
. Делая это, все ваши клики пойдут на onNavigationItemSelected
MainActivity
, а не на местный onNavigationItemSelected
.
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(this);
}
также переместить код в локальной onNavigationItemSelected
к onNavigationItemSelected
из MainActivity
.
Так что ваш onNavigationItemSelected
будет что-то вроде этого,
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Handle navigation view item clicks here.
int id = menuItem.getItemId();
menuItem.setChecked(true);
drawerLayout.closeDrawers();
if (id == R.id.nav_home) {
// Handle the home action
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
} else if (id == R.id.nav_the_wetlands) {
Toast.makeText(this, "The Wetlands", Toast.LENGTH_SHORT).show();
TheWetlandsFragment theWetlandsFragment = new TheWetlandsFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.relativelayout_for_fragment, theWetlandsFragment, theWetlandsFragment.getTag()).commit();
} else if (id == R.id.nav_the_mistbelt_forests) {
Toast.makeText(this, "The Mistbelt Forests", Toast.LENGTH_SHORT).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
изменить Также ваш activity_main_drawer_view.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/nav_home"
android:icon="@drawable/ic_dashboard"
android:title="Home" />
</group>
<item android:title="Information">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_the_wetlands"
android:icon="@drawable/ic_event"
android:title="The Wetlands" />
<item
android:id="@+id/nav_the_mistbelt_forests"
android:icon="@drawable/ic_event"
android:title="The Mistbelt Forests" />
<item
android:id="@+id/nav_the_grasslands"
android:icon="@drawable/ic_event"
android:title="The Grasslands" />
</group>
</item>
<item android:title="Quick Go To">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_accommodation"
android:icon="@drawable/ic_event"
android:title="Accommodation" />
<item
android:id="@+id/nav_cuisine"
android:icon="@drawable/ic_forum"
android:title="Cuisine" />
<item
android:id="@+id/nav_leisure_activites"
android:icon="@drawable/ic_forum"
android:title="Leisure & Activites" />
<item
android:id="@+id/nav_agri_tourism"
android:icon="@drawable/ic_forum"
android:title="Agri-tourism" />
<item
android:id="@+id/nav_education"
android:icon="@drawable/ic_forum"
android:title="Education" />
<item
android:id="@+id/nav_arts_crafts_decor"
android:icon="@drawable/ic_forum"
android:title="Arts, Crafts & DeCor" />
<item
android:id="@+id/nav_selective_shopping"
android:icon="@drawable/ic_forum"
android:title="Selective Shopping" />
<item
android:id="@+id/nav_for_children"
android:icon="@drawable/ic_forum"
android:title="For Children" />
</group>
</item>
<item android:title="Midlands Animals">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_midlands_birding_checklist"
android:icon="@drawable/ic_dashboard"
android:title="Midlands Birding Checklist" />
<item
android:id="@+id/nav_midlands_mammals_checklist"
android:icon="@drawable/ic_dashboard"
android:title="Midlands Mammals Checklist" />
</group>
</item>
</menu>
удачи.
Работая сейчас, большое вам спасибо –
Я также столкнулся с той же проблемой некоторое время назад, и в конце концов я понял, что я не написал 2-ую строку следующего кода
navigationView = (NavigationView) findViewById (R.id.navigationView) ; navigationView.setNavigationItemSelectedListener (это);
вы убедитесь, что вы написали то же самое иначе слушатель не будет работать
Используйте этот код:
navigationView = (NavigationView) findViewById(R.id.navigationView);
navigationView.bringToFront();
Пожалуйста, объясните проблему вы имеете. Выражение «не работает» слишком велико. –
В чем проблема? –
Если вы загружаете и открываете проект Android, вы заметите, что в нем есть ящик для навигации, который я бы хотел использовать правильно, поэтому, например, я бы хотел нажать на ** The Wetlands **, который, в свою очередь, должен измениться текущий фрагмент на ** fragment_the_wetlands ** У меня только сейчас есть фиктивные часы, чтобы увидеть, меняется ли фрагмент. Я не могу понять это правильно, пожалуйста, помогите с этим. –