当前位置:  开发笔记 > Android > 正文

为什么AppCompatActivity.onMenuOpened菜单(int featureId,菜单菜单)为空?

如何解决《为什么AppCompatActivity.onMenuOpened菜单(intfeatureId,菜单菜单)为空?》经验,为你挑选了1个好方法。

Android应用程序具有以下代码:

public class FooActivity extends AppCompatActivity{
   @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
    }
}

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



1> Maksim Ostro..:

当您单击菜单图标时,onMenuOpened会调用两次:第一次立即,然后准备菜单时.显然第一次它是null因为它没有准备好.因此,如果您想要在此回调中访问菜单 - 只需将其检查为null,如果不是则执行操作.

简单实验:

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);
    }
}

单击菜单图标时的输出:

D/tag: onMenuOpened called
D/tag: menu is null yet
D/tag: onPrepareOptionsMenu called
D/tag: onMenuOpened called
D/tag: menu is ready


非常感谢您的彻底解释.很奇怪onMenuOpened在准备之前被调用,因为它是一个"Opened"事件处理程序,而不是"Opening"事件处理程序.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有