首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么menu of AppCompatActivity.onMenuOpened(int featureId,Menu menu)为空?

为什么menu of AppCompatActivity.onMenuOpened(int featureId,Menu menu)为空?
EN

Stack Overflow用户
提问于 2017-01-10 07:47:05
回答 1查看 1.6K关注 0票数 5

一个Android应用程序有以下代码:

代码语言:javascript
复制
public class FooActivity extends AppCompatActivity{
   @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
    }
}

当点击3点溢出菜单按钮时,菜单显示正常,并调用此菜单(int featureId,menu menu),但MenuOpened为空。这是正常的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 15:37:43

当您单击菜单图标时,将调用onMenuOpened两次:第一次是立即调用,第二次是在菜单准备就绪时。显然,first time是空的,因为它没有准备好。因此,如果你想在这个回调中访问菜单-只要检查它是否为null,如果不是,就做一些事情。

简单的实验:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("first");
        menu.add("second");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        Log.d("tag", "onPrepareOptionsMenu called");
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        Log.d("tag", "onMenuOpened called");
        if(menu!=null) {
            Log.d("tag", "menu is ready");
        } else {
            Log.d("tag", "menu is null yet");
        }
        return super.onMenuOpened(featureId, menu);
    }
}

单击菜单图标时的输出:

代码语言:javascript
复制
D/tag: onMenuOpened called
D/tag: menu is null yet
D/tag: onPrepareOptionsMenu called
D/tag: onMenuOpened called
D/tag: menu is ready
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41558904

复制
相关文章

相似问题

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