Android Change Navigation Drawer Menu Items Text programmatically

前端 未结 5 1386
暗喜
暗喜 2021-01-30 20:33

I have the new Navigation Drawer in my app and I want to change the navigation view menu items title text dynamically from code. I have watched many posts but I can\'t figure ou

相关标签:
5条回答
  • 2021-01-30 21:22

    This code can be used to add menus dynamically. it worked for me... the main part of the code is the displayItems();.....pass the String[] of items as a parameter to the function....it works.

    public class Courses extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
    
        TextView nn,ne,np,nl;
        SharedPreferences sp;
        NavigationView navigationView;
        DrawerLayout drawer;
        ImageView img;
        NavigationView nv;
        int id;
    
    String[] acc={"ACPFAT","CPFA","Tally.ERP 9 Simplified","D P F A","CA Articles","DAA","TFAP","Tally.ERP 9 - Specialization","GST (Goods and service Tax)"};
    
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.setDrawerTitle(Gravity.CENTER,n);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, 
                     R.string.navigation_drawer_open,R.string.navigation_drawer_close);
    
    drawer.addDrawerListener(toggle);
    toggle.syncState();
    navigationView.setNavigationItemSelectedListener(this);
    
    Intent i=getIntent();
    id=i.getIntExtra("button",0);
    
    switch(id)
        {
    
            case R.id.account:
                img.setImageResource(R.drawable.acc);
                displayItems(acc);
                break;
    
            case R.id.modular:
                img.setImageResource(R.drawable.acc);
                displayItems(mod);
                break;
    
            case R.id.diploma:
    
                img.setImageResource(R.drawable.acc);
                displayItems(dc);
                break;
    
        }
    
    public void displayItems(String[] a)
      {
    
        final NavigationView navigationView=findViewById(R.id.nav_view);
        final DrawerLayout drawer=findViewById(R.id.drawer_layout);
        Menu menu=navigationView.getMenu();
        SubMenu sb=menu.addSubMenu("Courses");
    
        int i=0;
        while(i<a.length)
        {
            sb.add(a[i]);
            i++;
        }
     }
    
    0 讨论(0)
  • 2021-01-30 21:23

    You can change the title of Navigation Menu Item programmatically by adding following lines in MainActivity.java file.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        //other stuff here
        ...
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    
        // get menu from navigationView
        Menu menu = navigationView.getMenu();
    
        // find MenuItem you want to change
        MenuItem nav_camara = menu.findItem(R.id.nav_camara);
    
        // set new title to the MenuItem
        nav_camara.setTitle("NewTitleForCamera");
    
        // do the same for other MenuItems
        MenuItem nav_gallery = menu.findItem(R.id.nav_gallery);
        nav_gallery.setTitle("NewTitleForGallery");
    
        // add NavigationItemSelectedListener to check the navigation clicks
        navigationView.setNavigationItemSelectedListener(this);
    
    }
    

    This works fine for me. Hope it'll help you.

    0 讨论(0)
  • 2021-01-30 21:24

    If you have a layout in navigation drawer menu as an item and you want to change it programmatically, this code snippet will help you:

    MenuItem nav = navigationView.getMenu().findItem(R.id.nav_close_app);
    nav.setActionView(R.layout.item_navigationdrawer_close_app);
    
    0 讨论(0)
  • 2021-01-30 21:25
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_menus);
    
    
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    
        Menu menu = navigationView.getMenu();
        MenuItem nav_login = menu.findItem(R.id.nav_logout);
    nav_login.setTitle("Login");
    
    
    }
    

    This is correct! Hope this is running fine......

    0 讨论(0)
  • 2021-01-30 21:33

    Change the code like below in case you rename or remove item from navigation menu drawer list

      NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            Menu menu = navigationView.getMenu();
            menu.findItem(R.id.nav_profile).setTitle("My Account");
            menu.findItem(R.id.nav_mng_task).setTitle("Control Task");
            //menu.findItem(R.id.nav_pkg_manage).setVisible(false);//In case you want to remove menu item
            navigationView.setNavigationItemSelectedListener(this);
        }
    
    0 讨论(0)
提交回复
热议问题