2013-05-11 106 views
19

这是我的ActionBar菜单的xml文件。调用setContentViewMenuItem的findViewById返回null

<?xml version="1.0" encoding="utf-8"?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
      android:id="@+id/fav_button" 
      android:title="Favourite" 
      android:icon="@drawable/unstar" 
      android:showAsAction="always|withText" /> 
</menu> 

在我onCreate功能,后。我做favButton = (MenuItem) this.findViewById(R.id.fav_button);但是这返回null。

但是返回onOptionsItemSelected函数上的正确对象。

我使用ActionBarSherlock,如果这会有所作为。

我尝试过其他findViewById建议的各种选项,返回空问题,但它们还没有解决我的问题。

+0

http://www.vogella.com/articles/AndroidActionBar/article.html。检查链接。 – Raghunandan 2013-05-11 18:32:34

回答

33

代替

favButton = (MenuItem) this.findViewById(R.id.fav_button); 

在onCreateOptionsMenu getMenuInflater()膨胀(R.menu.activity_main,菜单)之后。

favButton = menu.findItem(R.id.fav_button); 
+2

在onCreate期间没有办法获取它吗?我想能够基于savedInstanceState Bundle setChecked()。或者,有没有更好的方法来保存菜单项的旋转状态? – aij 2015-02-20 22:33:19

+1

我可以在onCreate上做吗? – 2015-11-11 21:18:34

+0

它仍然为空,直到它被选中 – 2015-11-11 21:18:52

1

使用menu.findItem()来获取菜单。但是这需要在菜单充值后完成。

此外,要回答您的评论,您可以使用onPrepareOptionsMenu来设置菜单的状态。如果这个菜单是一次性更新,你也可以使用onCreateOptionsMenu,它只被调用一次。