这是我的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返回null问题提出的各种选项,但它们都没有解决我的问题。
发布于 2013-05-12 02:52:01
而不是
favButton = (MenuItem) this.findViewById(R.id.fav_button);
在getMenuInflater().inflate(R.menu.activity_main,菜单之后的onCreateOptionsMenu中);
favButton = menu.findItem(R.id.fav_button);
发布于 2015-05-21 01:35:23
使用menu.findItem()获取菜单。但这需要在菜单膨胀之后完成。
另外,为了在评论中回答你的问题,你可以使用onPrepareOptionsMenu来设置菜单的状态。如果此菜单是一次性更新,您也可以使用onCreateOptionsMenu,它只调用一次。
发布于 2018-03-25 01:20:36
但是,如果有人真的需要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;
}
https://stackoverflow.com/questions/16500415
复制相似问题