2016-05-03 18 views
1

ナビゲーションドロワーのアイテムが選択されると、左のドロワーとフラグメントが変更されます。問題は、「アイテムA」がすでに選択されていて、ユーザーが再度選択した場合、同じフラグメントに対してフラグメントが変更されることです。ナビゲーションドロワー:現在選択されているアイテムを知る方法?

この現象を回避するには、どのアイテムが既に選択されているかを知る必要があります。私は、mLastSelectedItemPositionという属性を使用していましたが、これは良い解決策ではないと思います。ナビゲーション・ドロワーから現在のチェック・アイテムを取得する方法はありますか?

class OnNavigationItemSelectedListener implements NavigationView.OnNavigationItemSelectedListener { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      if (mLastSelectedItemPosition != menuItem.getOrder()) { 
       // Is not the same item, so I can change the fragment. 
       mLastSelectedItemPosition = menuItem.getOrder(); 
      } 
      mDrawerLayout.closeDrawers(); 
      return true; 
     } 
    } 
} 

答えて

5

私は、まったく同じことを行う選択した位置を保持int変数を持っています。 この変数をonInstaceChangeに保存することを心に留めておきましょう。なぜなら、あなたがあなたの引き出しで古くなっているかもしれないからです。 だから、そうは言って、いくつかのコード:そのような

private static final String MENU_ITEM = "menu_item"; 
    private int menuItemId; 
    ... 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
       @Override 
       public boolean onNavigationItemSelected(MenuItem item) { 

        if (menuItemId == item.getItemId()) { 
         drawerLayout.closeDrawer(navigationView); 
         return false; 

        switch (item.getItemId()) { 
.... 
        } 

        ... 
        drawerLayout.closeDrawer(navigationView); 
        item.setChecked(true); 
        menuItemId = item.getItemId(); 
        return true; 
       } 
      }); 
    @Override 
     protected void onSaveInstanceState(@NonNull Bundle outState) { 
      super.onSaveInstanceState(outState); 
      outState.putInt(MENU_ITEM, menuItemId); 
     } 

     @Override 
     protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { 
      super.onRestoreInstanceState(savedInstanceState); 
      this.menuItemId = savedInstanceState.getInt(MENU_ITEM); 
     } 

何か!

0

これはあなたに役立つと思います。

private class SlideMenuClickListener implements 
       ListView.OnItemClickListener { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
        long id) { 
       // display view for selected nav drawer item 
       displayView(position); 
Toast.makeText(getApplicationContext(),"You have selected " +position,Toast.LENGTH_LONG).show(); 
      } 
     } 
+0

私はこの方法を使うことができましたが、私はまた、現在のアイテムと最後のアイテムが同じアイテムであるかどうかをチェックするために、どのアイテムが選択されたかを知る必要があります。問題は、どのアイテムがすでに選択されているかを知ることです。 – heloisasim

関連する問題