这是我的ActionBar菜单的xml文件。
<?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
功能中, 后调用setContentView
。我做favButton = (MenuItem) this.findViewById(R.id.fav_button);
但是这会返回null。
但是返回onOptionsItemSelected
函数上的正确对象。
我正在使用ActionBarSherlock,如果这会产生影响。
我尝试了其他findViewById建议的各种选项,但是它们没有解决我的问题。
答案 0 :(得分:40)
而不是
favButton = (MenuItem) this.findViewById(R.id.fav_button);
在getMenuInflater()。inflate(R.menu.activity_main,menu)之后的onCreateOptionsMenu中;
favButton = menu.findItem(R.id.fav_button);
答案 1 :(得分:2)
使用menu.findItem()获取菜单。但这需要在菜单膨胀后完成。
此外,要在评论中回答您的问题,您可以使用onPrepareOptionsMenu来设置菜单的状态。如果此菜单是一次更新,您也可以使用onCreateOptionsMenu,只调用一次。
答案 2 :(得分:1)
但是如果有人确实需要View
而不是MenuItem
(对于不同的操作,例如开始动画),你仍然可以通过下一个方式获得它:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_menu_xml_file, menu);
...
new Handler().post(new Runnable() {
@Override
public void run() {
view = findViewById(R.id.menu_refresh_button);
// view.startAnimation(animation);
}
});
return true;
}
答案 3 :(得分:0)
尝试
final Toolbar toolbar = findViewById(R.id.toolbar);
Menu menu=toolbar.getMenu();
MenuItem item = menu.findItem(R.id.'name id item');
对我有用。
答案 4 :(得分:0)
我不知道为什么,但就我而言,我使用 findViewById(R.id.menu_id)
return null
。但是我发现我在 findViewById(item.getItemId)
中使用了 onOptionsItemSelected
,它返回了我们想要的视图。