web-dev-qa-db-fra.com

Android Modifier les éléments de menu du tiroir de navigation Texte par programmation

J'ai le nouveau tiroir de navigation dans mon application et je souhaite modifier le texte du titre des éléments du menu de la vue de navigation de manière dynamique à partir du code. J'ai regardé beaucoup de messages mais je ne peux pas comprendre comment puis-je faire cela. Comment puis-je y parvenir correctement?

MainActivity.Java

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

setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }
});

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
        this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

}

activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">

<group Android:checkableBehavior="single">
    <item Android:id="@+id/nav_camara" Android:icon="@Android:drawable/ic_menu_camera"
        Android:title="Import" />
    <item Android:id="@+id/nav_gallery" Android:icon="@Android:drawable/ic_menu_gallery"
        Android:title="Gallery" />
    <item Android:id="@+id/nav_slideshow" Android:icon="@Android:drawable/ic_menu_slideshow"
        Android:title="Slideshow" />
    <item Android:id="@+id/nav_manage" Android:icon="@Android:drawable/ic_menu_manage"
        Android:title="Tools" />
</group>

<item Android:title="Communicate">
    <menu>
        <item Android:id="@+id/nav_share" Android:icon="@Android:drawable/ic_menu_share"
            Android:title="Share" />
        <item Android:id="@+id/nav_send" Android:icon="@Android:drawable/ic_menu_send"
            Android:title="Send" />
    </menu>
</item>

29
user3065901

Vous pouvez modifier le titre de l'élément de menu de navigation par programmation en ajoutant les lignes suivantes dans le fichier MainActivity.Java.

@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);

}

Cela fonctionne bien pour moi. J'espère que ça vous aidera.

90
ELITE

Modifiez le code comme ci-dessous si vous renommez ou supprimez un élément de la liste des tiroirs du menu de navigation. 

  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);
    }
11
Ness Tyagi

Ce code peut être utilisé pour ajouter des menus de manière dynamique. cela a fonctionné pour moi ... la partie principale du code est displayItems (); ..... passe la chaîne [] d'éléments en tant que paramètre de la fonction .... cela fonctionne.

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
Skanda Shreyas