0

I am developing an Android app. In my app I am using navigation drawer and navigation view. I am adding menu item programmatically to drawer. But when I add, main menu appears below sub menu.

This is how I add menu in onCreate of activity

private static final int CATEGORY_MENU_GROUP_ID = 20;
private static final int MAIN_MENU_ITEM_GROUP_ID = 19;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        updateAuthUI();
        addCategoryMenu();
}

This is my updateAuthUI method

public void updateAuthUI()
    {
        isLoggedIn = authStorage.getBoolean(getResources().getString(R.string.pref_is_logged_in),false);
        Menu menu = leftDrawer.getMenu();
        menu.removeGroup(MAIN_MENU_ITEM_GROUP_ID);
        menu.add(MAIN_MENU_ITEM_GROUP_ID,96,1,"Leaderboard").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                startActivity(new Intent(MainActivity.this,LeaderboardActivity.class));
                return false;
            }
        });
        if(isLoggedIn)
        {
            fabBtn.setVisibility(View.VISIBLE);
            menu.add(MAIN_MENU_ITEM_GROUP_ID,getResources().getInteger(R.integer.logout_item_id),4,"Sign out").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    logOut();
                    return false;
                }
            });
        }
        else{
            fabBtn.setVisibility(View.INVISIBLE);
            menu.add(MAIN_MENU_ITEM_GROUP_ID,getResources().getInteger(R.integer.register_item_id),2,"Create Account").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    openRegisterActivity();
                    item.setChecked(true);
                    return true;
                }
            });
            menu.add(MAIN_MENU_ITEM_GROUP_ID,getResources().getInteger(R.integer.login_item_id),3,"Sign in").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    openLoginActivity();
                    item.setChecked(true);
                    return true;
                }
            });
        }
}

This is addCategoryMenu method

private void addCategoryMenu()
{
if(categoryItems!=null && categoryItems.size()>0)
        {
            Menu menu = leftDrawer.getMenu();
            SubMenu categorySubMenu = menu.addSubMenu("Categories");
            int menuStart = 6;
            for(int i = 0;i<categoryItems.size();i++)
            {

                categorySubMenu.add(CATEGORY_MENU_GROUP_ID,categoryItems.get(i).getId(),menuStart,categoryItems.get(i).getName()).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        categoryItemSelected(item);
                        item.setChecked(true);
                        return true;
                    }
                });

                menuStart++;
            }
        }
}

When I run main menu appears below of sub menu(category menu) like this:

enter image description here

Why is that happening and how can I fix it?

halfer
  • 19,824
  • 17
  • 99
  • 186
Wai Yan Hein
  • 13,651
  • 35
  • 180
  • 372

0 Answers0