2017-06-26 14 views
-1

私はプログラムでいくつかのタイトルを自分のアクティビティから変更したいと思っています。Android、プログラムでメニュー項目のタイトルを変更する

「ショーsomething1」 と何らかのアクションを実行します。 私は

「の表示/非表示something1」 「の表示/非表示something2」

そして今、私は、テキストを変更したいようないくつかのアイテムを持っていますこのメニュー項目のテキストを変更します。

"隠すsomething1" .....

Set title of an Android Item

私は、このソリューションをテストし、ヌル・ポインタ

マイレイアウトを取得:

<?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> 

そして、私のコード:

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

このエラーを得た:

プロセス:COM。 packagename.foo、PID:12441 java.lang.NullPointerException:インタフェースメソッド 'android.view.MenuIを呼び出そうとしていますcom.sherdle.universal.rallye.MainActivity.onCreateOptionsMenuでヌル・オブジェクト・リファレンス にTEM android.view.MenuItem.setTitle(java.lang.CharSequence)」(MainActivity.java:646)この行の

MenuItem item=menu.getItem(R.id.menu_1)

は:)

EDITを助ける必要があります。別の解決策が見つかりました:Android - How to dynamically change menu item text outside of onOptionsItemsSelected or onCreateOptionsMenuをしかし渡すとは対照的に、メニューののgetItem()メソッドは、指定されたインデックスでメニュー項目を返すため

答えて

1

を動作しません。上記のようにIndexOutOfBoundsExceptionをスローする可能性があるリソースID。here in the docs代わりに、インデックス値を使用して、最初のメニュー項目であるmenu_1では0、もう1つのメニュー項目であるmenu_2では1にする必要があります。

+0

Oh、damn MenuItem item = menu.getItem(R.id.menu_1); //ここitemIndexはintです。注意深く注釈を読みます:-Oありがとう!これはインデックス内で動作します。これは「高速」ですか?menu.findItem(R.id.menu_2); menu1.setTitle( "Text");どの方法が良いですか? findItemまたはgetItem経由で? – georf

+0

@georfどちらが「高速」かはわかりませんが、リソースIDでビューを参照するのがよい方法なので、findItem()をおすすめします。 – DaveNOTDavid

+0

大丈夫です! helpByItemを使用しますが、ヘルプのための最高のバージョンの感謝のようです=) – georf

関連する問題