2016-04-11 18 views
0

メニュー項目のテキストの設定に問題があります。私は、バスケット内のすべてのアイテムの価格を見るためにアクティビティを開始するときに欲しいです。私は買い物リストのアクティビティを起動するたびしかし、私はエラーの下に取得する:メニュー項目のテキストを設定する

java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference

これはコードです:

public class Shopping_list_activity extends AppCompatActivity{ 

    private Menu menu; 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.shopping_list_activity); 

      updateMenuTitles(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.menu_shopping_list, menu); 
     this.menu = menu; 
     return true; 
    } 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.menu_shopping_list_saveList) { 
      Toast.makeText(Shopping_list_activity.this, " Clicked", Toast.LENGTH_SHORT).show(); 
     } 
//  else if (id == R.id.menu_shopping_list_total){ 
//   Toast.makeText(Shopping_list_activity.this, getPriceOfDisplayedItems() + " total", Toast.LENGTH_SHORT).show(); 
//  } 

     return super.onOptionsItemSelected(item); 
    } 

private void updateMenuTitles() { 
    MenuItem menuItem = menu.findItem(R.id.menu_shopping_list_total); 
    if (getPriceOfDisplayedItems() > 0) { 
     menuItem.setTitle(String.valueOf(getPriceOfDisplayedItems())); 
    } else { 
     menuItem.setTitle("Total: 0.00"); 
    } 
} 

getPriceOfDisplayedItems()ディスプレイ正しい価格。

とXMLファイル:

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

    <item 
     android:id="@+id/menu_shopping_list_total" 
     android:title="@string/total" 
     app:showAsAction="always" /> 

</menu> 

誰もがこの問題で私を助けることができますか?

答えて

0

私はonCreate方法がonCreateOptionsメニューの前に呼ばれると思います。だからthis.menunullです。 updateMenuTitlesの呼び出しをonCreateOptionsMenuに移動してみてください。

+0

タンクは大丈夫ですが、onCreateOptionsMenuの合計を更新しても問題ありません。 – Adrian

0

あなたはXMLでmenu_shopping_list_saveList項目を追加する必要があります

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

    <item 
     android:id="@+id/menu_shopping_list_total" 
     android:title="@string/total" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/menu_shopping_list_saveList" 
     android:title="@string/total" 
     app:showAsAction="always" /> 

</menu> 
+0

これは私が参照のうえ午前アイテム、私は<項目 アンドロイド変更したいこのいずれかです:ID = "@ + ID/menu_shopping_list_total" アンドロイド:タイトル= "@文字列/合計" アプリ:= "常にshowAsActionを"/> – Adrian

関連する問題