首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MenuItem的findViewById返回null

MenuItem的findViewById返回null
EN

Stack Overflow用户
提问于 2013-05-12 02:28:55
回答 5查看 20.4K关注 0票数 27

这是我的ActionBar菜单的xml文件。

代码语言:javascript
复制
<?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问题提出的各种选项,但它们都没有解决我的问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-12 02:52:01

而不是

代码语言:javascript
复制
favButton = (MenuItem) this.findViewById(R.id.fav_button);  

在getMenuInflater().inflate(R.menu.activity_main,菜单之后的onCreateOptionsMenu中);

代码语言:javascript
复制
favButton = menu.findItem(R.id.fav_button);
票数 50
EN

Stack Overflow用户

发布于 2015-05-21 01:35:23

使用menu.findItem()获取菜单。但这需要在菜单膨胀之后完成。

另外,为了在评论中回答你的问题,你可以使用onPrepareOptionsMenu来设置菜单的状态。如果此菜单是一次性更新,您也可以使用onCreateOptionsMenu,它只调用一次。

票数 3
EN

Stack Overflow用户

发布于 2018-03-25 01:20:36

但是,如果有人真的需要View而不是MenuItem (用于不同的操作,例如开始动画),您仍然可以通过以下方式获得它:

代码语言:javascript
复制
@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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16500415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档