菜单按钮只能工作一次

时间:2013-12-17 10:15:15

标签: android menu

我想在点击特定图片时显示一个菜单:

popup_but = (ImageView) findViewById(R.id.imageView2);
popup_but.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        showmen();
    }
});

菜单:

public void showmen() {
    PopupMenu popup = new PopupMenu(First.this, popup_but);
    popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) 
            {
                case R.id.men1:
                    //do something
                return true;
                case R.id.men5:
                    finish();
                 return true;
            }
            return true;
        }
    });
    popup.show();
}

它。作品。现在我想点击硬件菜单按钮时也这样做。所以我使用这段代码:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    showmen();
}

问题在于:当点击菜单按钮时,它只显示第一次菜单

2 个答案:

答案 0 :(得分:0)

查看onPrepareOptionsMenu

  

在Android 2.3.x及更低版本上,系统调用onPrepareOptionsMenu()   每次用户打开选项菜单(按菜单按钮)。

     

在Android 3.0及更高版本中,选项菜单始终被视为   菜单项在操作栏中显示时打开。当一个事件   发生并且您想要执行菜单更新,您必须调用   invalidateOptionsMenu()请求系统调用   onPrepareOptionsMenu()。

答案 1 :(得分:0)

每次单击硬件菜单按钮时都会调用

onCreateOptionsMenu(),并且每次都返回true。我所做的是,使用XML设置菜单项的样式,然后在onCreateOptionsMenu()内扩展XML。每次单击硬件菜单时,菜单都会从XML中膨胀。 onPrepareOptionsMenu()仅适用于您希望在应用生命周期内更改菜单项的情况。我认为问题在于showmen()的实施。我认为PopupMenu.OnMenuItemClickListener只是第一次被召唤,而不是每次都被召唤。