2016-04-11 92 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

这是我指的项目,这一次我想改变的 Adrian