2017-06-26 4 views
-1

Ich möchte einige Titel aus meinen Activites programmgesteuert ändern. Ich habe einige Produkte wieAndroid, Titel des Menüelements programmgesteuert ändern

"Show/Hide something1" "Show/Hide something2"

Und jetzt möchte ich, um den Text zu ändern:

"Show something1" und eine Aktion zu tun und den Text dieser Menüpunkt ändern:

"Hide something1" .....

Set title of an Android Item

ich diese Lösung testen, und ein Null-Pointer

mein Layout erhalten:

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

    <item 
     android:id="@+id/menu_1" 
     universal:showAsAction="never" 
     android:title="Show/Hide Something1" /> 

    <item 
     android:id="@+id/menu_2" 
     universal:showAsAction="never" 
     android:title="Show/Hide Something2" /> 

</menu> 

Und meinen Code:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.rallye_menu, menu); 
     MenuItem item=menu.getItem(R.id.menu_1); // here itemIndex is int 
     item.setTitle("YourTitle"); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.menu_1: 
       // do some action 
       return true; 
      case R.id.menu_2: 
       // doe other action 
       return true; 
       default: 
       return super.onOptionsItemSelected(item); 
     } 
} 

hätte diesen Fehler:

Prozess: com. packagename.foo, PID: 12441 java.lang.NullPointerException: Versuch, die Schnittstellenmethode 'android.view.MenuI aufzurufen tem android.view.MenuItem.setTitle (java.lang.CharSequence)‘auf null Objektreferenz bei com.sherdle.universal.rallye.MainActivity.onCreateOptionsMenu (MainActivity.java:646)

in dieser Zeile: MenuItem item=menu.getItem(R.id.menu_1)

Benötigen Sie Hilfe :)

EDIT: eine andere Lösung gefunden: Android - How to dynamically change menu item text outside of onOptionsItemsSelected or onCreateOptionsMenu funktioniert aber nicht

Antwort

1

da Menus getItem() -Methode einen Menüpunkt in einem Index im Gegensatz gegeben kehrt zum Übergang in eine Ressourcen-ID, die möglicherweise eine IndexOutOfBoundsException wie erwähnt here in the docs auslösen kann. Stattdessen sollten Sie Indexwerte verwenden, so dass es für den ersten Menüeintrag menu_1 und 1 für den anderen Menüeintrag menu_2 0 wäre.

+0

Oh, verdammt MenuItem item = menu.getItem (R.id.menu_1); // hier ist itemIndex int ich sollte die Anmerkungen aufmerksam lesen: -O Danke! jetzt funktioniert es mit in index Ist das "schneller": menu.findItem (R.id.menu_2); menu1.setTitle ("Text"); Welche Methode ist besser? über findItem oder getItem? – georf

+0

@georf Nicht wirklich sicher, was "schneller" ist, aber ich würde findItem() empfehlen, da es eine gute Methode ist, auf eine Ansicht anhand ihrer Ressourcen-ID zu verweisen. – DaveNOTDavid

+0

okay danke! Will findByItem verwenden es scheint die beste Version Danke für Hilfe =) – georf

Verwandte Themen