2015-10-22 16 views
20

Mam nową szufladę nawigacji w mojej aplikacji i chcę dynamicznie zmieniać tekst pozycji menu widoku nawigacji z kodu. Oglądałem wiele postów, ale nie wiem, jak to zrobić. Jak mogę to osiągnąć poprawnie?Android Zmień elementy menu szuflady w menu Programowo programowo

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> 

+1

Jedynym sposobem dynamicznego zmieniania menu jest wyczyszczenie go i załadowanie innego menu: http://stackoverflow.com/questions/31203212/how-to-inflate- android-nawigacja-z-innym-menu-dynamicznie-podczas-oncli –

Odpowiedz

66

Można zmienić tytuł elementu menu nawigacji programowo dodając następujące wiersze w MainActivity.java pliku.

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

} 

To działa dobrze dla mnie. Mam nadzieję, że ci to pomoże.

+3

Odpowiedź powinna być zaakceptowana! – BenRoob

+1

najlepsze podejście w Internecie – Mikhail

9

Zmień kod jak poniżej w przypadku zmiany nazwy lub usunąć pozycję z listy menu nawigacji szuflady

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); 
    } 
-1
@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"); 


} 

To prawda! Mam nadzieję, że to działa dobrze ......

+0

Na mojej aplikacji działa dobrze ...... –

Powiązane problemy