2016-10-12 5 views
1

Я хочу, чтобы NavigationView проверял один элемент при запуске приложения. Но я обнаружил, что NavigationView.setCheckedItem(R.id.xxx) не работает. И я также пробовал navigationView.getMenu().findItem(R.id.xxx).setChecked(true), тот же результат.NavigationView с DrawerLayout setCheckedItem не работает

Я уже установил checkableBehavior для одиночного.

<item android:title="@string/sliding_menu_group_places"> 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/xxx" 
        android:icon="@drawable/xxx" 
        android:title="@string/xxx" /> 

       <item 
        android:id="@+id/xxx" 
        android:icon="@drawable/xxx" 
        android:title="@string/xxx" /> 

       ... 
      </group> 
     </menu> 
    </item> 

Но есть один способ работал:

drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() { 
     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      navigationView.setChecked(R.id.xxx); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
     } 

     @Override 
     public void onDrawerStateChanged(int newState) { 
     } 
    }); 

навигации пункт будет проверяться в onDrawerOpened обратного вызова. Я много искал в stackoverflow, но ни один метод не работает для меня. Кто может мне помочь?

EDIT-1

<?xml version="1.0" encoding="utf-8"?> 

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/xxx" 
     android:icon="@drawable/xxx" 
     android:title="@string/recent_display_name" /> 

    <item android:title="@string/sliding_menu_group_places"> 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/xxx" 
        android:icon="@drawable/xxx" 
        android:title="@string/my_files_display_name" /> 

       <item 
        android:id="@+id/nav_item_sdcard" 
        android:icon="@drawable/ic_nav_sdcard" 
        android:title="@string/storage_display_name" /> 
      </group> 
     </menu> 
    </item> 

    <item android:title="@string/sliding_menu_group_tool"> 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/xxx" 
        android:icon="@drawable/xxx" 
        android:title="@string/clean_display_name" /> 
      </group> 
     </menu> 
    </item> 

    <item android:title="@string/sliding_menu_group_settings"> 
     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/xxx" 
        android:icon="@drawable/xxx" 
        android:title="@string/settings_display_name" /> 

       <item 
        android:id="@+id/xxx" 
        android:icon="@drawable/xxx" 
        android:title="@string/exit_display_name" /> 
      </group> 

     </menu> 
    </item> 
</group> 

+0

попробуйте navView.getMenu(). GetItem (pos) .setChecked (true); – darwin

+0

только что установленный, android: checked = "true" внутри вашего . не нужно устанавливать его вручную в свой Java-файл. – Radhey

+0

mDrawerList.setItemChecked (позиция, истина); здесь mDrawerList - это вы ListView, попробуйте это – user3068659

ответ

0

Попробуйте так:

menuItem.setCheckable(true); 
       menuItem.setChecked(true); 
       if (mPreviousMenuItem != null && mPreviousMenuItem != menuItem) { 
        mPreviousMenuItem.setChecked(false); 
       } 
       mPreviousMenuItem = menuItem; 
+0

В любом случае, спасибо, но это не настоящее решение. –

3

Благодаря @darwin.

Причина: navigationView.setCheckedItem(R.id.xxx) не работает, потому что NavigationView не готов к этому.

Решение:

navigationView.post(new Runnable() { 
     @Override 
     public void run() { 
      navigationView.setCheckedItem(id); 
     } 
    }); 
0

пункты меню должны быть проверяемыми.

<item android:title="@string/sliding_menu_group_places"> 
    <menu> 
     <group> <!-- removed behavior --> 
      <item 
       android:id="@+id/xxx" 
       android:icon="@drawable/xxx" 
       android:title="@string/xxx" 
       android:checkable="true" /> <!-- added 'checkable' --> 

      <item 
       android:id="@+id/xxx" 
       android:icon="@drawable/xxx" 
       android:title="@string/xxx" 
       android:checkable="true" /> <!-- added 'checkable' --> 

      ... 
     </group> 
    </menu> 
</item> 
-1

использование setChecked метод пункта вместо navigationView

navigationView.post(new Runnable() { 
    @Override 
    public void run() { 
     navigationView.getMenu().getItem(0).setChecked(true); 
    } 
}); 
0

После кода открытого первого фрагмента NavigationView и проверить его на NavigationView. Для значения savedInstancesState == NULL условие: https://stackoverflow.com/a/26855936/4606368

if (savedInstanceState == null) { 
       Fragment fragment = new EventsUpcoming(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment, "Upcoming").commit(); 
       navigationView.setCheckedItem(R.id.nav_eventupcoming); 
       toolbar.setTitle(R.string.events_upcoming); 
} 

Добавьте этот код в OnCreate метод вашей деятельности.