2016-10-12 32 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

嘗試navigationView.getMenu()。getItem(pos).setChecked(true); – darwin

+0

剛剛設置,android:checked =「true」在您的。不需要在你的java文件中手動設置它。 – Radhey

+0

mDrawerList.setItemChecked(position,true);這裏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方法添加該代碼。

相關問題