在导航栏中获取所选菜单项的索引值

时间:2016-02-02 04:59:05

标签: android

我已经实现了导航抽屉,它工作正常。当导航器关闭时,我必须使所选项目取消选择的唯一问题。我想知道如何才能获得所选菜单项的索引值。

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
  @Override
  public boolean onNavigationItemSelected(MenuItem menuItem) {
      menuItem.setChecked(false);
   }
)}

6 个答案:

答案 0 :(得分:15)

一种方法是将菜单项ID存储在变量中,例如 checkedItemID

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
  @Override
  public boolean onNavigationItemSelected(MenuItem menuItem) {
      menuItemID=menuItem.getItemId();
   }
)}
  

然后在实施

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            // Do whatever you want here

         navigationView.getMenu().findItem(menuItemID).setChecked(false);
        }

        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            // Do whatever you want here
        }
    };
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);

答案 1 :(得分:4)

使int 数据类型的变量位置。首先将其值设置为0并且onNavigationItemSelected将其值更改为menuItem索引(如0或1或2,依此类推)。现在,位置将为您提供索引精选menuItem

int position = 0;
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
           case R.id.first:
                position = 0;
                break;
           case R.id.second:
                position = 1;
                break;
           case R.id.third:
                position = 2;
                break;
        }
        return true;
    }
});

答案 2 :(得分:3)

尝试此操作以获取位置0的导航项目getItem(index)将为您提供所需的项目

navigationView.getMenu().getItem(selectedposition).setChecked(false);

也可以使用此链接作为参考,以获取已选择的项目http://thegeekyland.blogspot.in/2015/11/navigation-drawer-how-set-selected-item.html

使用以下代码获取所选位置

int selectedposition= 0;

    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            switch (menuItem.getItemId()) {
               case R.id.firstitemid:
                    selectedposition= 0;
                    break;
               case R.id.seconditemid:
                    selectedposition= 1;
                    break;
               case R.id.thirditemid:
                    selectedposition= 2;
                    break;
            }
            return true;
        }
    });

答案 3 :(得分:2)

这就是你所需要的,它取消选择并选择新的

navigationView.setCheckedItem(item.getItemId());

它应该在onNavigationItemSelected的底部。

为了更清楚,这里有一个例子

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.nav_home:
            controller.setFragment(new HomeFragment());
            break;
        case R.id.nav_settings:
            controller.setFragment(new SettingsFragment());
            break;
        case R.id.nav_logout:
            Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
            intent.putExtra(autoLogin, false);
            startActivity(intent);
            break;
    }
    navigationView.setCheckedItem(item.getItemId());
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return false;
}

答案 4 :(得分:0)

首先将navigationMenu分配给类字段

private NavigationView navigationView;
private int currentPosition;
...
navigationView = (NavigationView) findViewById(R.id.nav_view);

现在,在菜单回调中,您可以遍历菜单项:

public boolean onNavigationItemSelected(MenuItem item) {
    for (int i=0;i<navigationView.getMenu().size();i++){
        if(item==navigationView.getMenu().getItem(i)){
            currentPosition=i;
            break;
        }
    }
 ....
}

您可以更改菜单项的顺序而不会破坏任何内容

答案 5 :(得分:0)

另一种对我有用的简单方法

public boolean onNavigationItemSelected(MenuItem item) {
    int index = (item.getItemId() % item.getGroupId())-1;
    ....
}

我认为,这比使用For loop或Switch案例更有效。

如果您仍然遇到问题,那么我的建议是检查Log-cat中的项目ID和组ID,以便您更好地了解您正在处理的内容。