2016-05-03 5 views
1

Существует левый ящик и фрагмент, который изменяется, когда выбран элемент в ящике навигации. Проблема в том, что если «Item 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

Смежные вопросы