2016-09-10 2 views
-3

Пожалуйста, кто-нибудь может помочь мне с фрагментами из ящика навигации, по какой-то причине я не могу заставить их работать, и весь код выглядит правильно.onNavigationItemSelected не работает в NavigationView

Here - ссылка на исходный код.

+1

Пожалуйста, объясните проблему вы имеете. Выражение «не работает» слишком велико. –

+0

В чем проблема? –

+0

Если вы загружаете и открываете проект Android, вы заметите, что в нем есть ящик для навигации, который я бы хотел использовать правильно, поэтому, например, я бы хотел нажать на ** The Wetlands **, который, в свою очередь, должен измениться текущий фрагмент на ** fragment_the_wetlands ** У меня только сейчас есть фиктивные часы, чтобы увидеть, меняется ли фрагмент. Я не могу понять это правильно, пожалуйста, помогите с этим. –

ответ

5

Посмотрите на ваш 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. Делая это, все ваши клики пойдут на onNavigationItemSelectedMainActivity, а не на местный 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 &amp; 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 &amp; 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> 

удачи.

+0

Работая сейчас, большое вам спасибо –

0

Я также столкнулся с той же проблемой некоторое время назад, и в конце концов я понял, что я не написал 2-ую строку следующего кода

navigationView = (NavigationView) findViewById (R.id.navigationView) ; navigationView.setNavigationItemSelectedListener (это);

вы убедитесь, что вы написали то же самое иначе слушатель не будет работать

2

Используйте этот код:

navigationView = (NavigationView) findViewById(R.id.navigationView); 
navigationView.bringToFront(); 
Смежные вопросы