我想在点击特定图片时显示一个菜单:
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();
}
问题在于:当点击菜单按钮时,它只显示第一次菜单
答案 0 :(得分:0)
在Android 2.3.x及更低版本上,系统调用onPrepareOptionsMenu() 每次用户打开选项菜单(按菜单按钮)。
在Android 3.0及更高版本中,选项菜单始终被视为 菜单项在操作栏中显示时打开。当一个事件 发生并且您想要执行菜单更新,您必须调用 invalidateOptionsMenu()请求系统调用 onPrepareOptionsMenu()。
答案 1 :(得分:0)
onCreateOptionsMenu()
,并且每次都返回true
。我所做的是,使用XML设置菜单项的样式,然后在onCreateOptionsMenu()
内扩展XML。每次单击硬件菜单时,菜单都会从XML中膨胀。 onPrepareOptionsMenu()
仅适用于您希望在应用生命周期内更改菜单项的情况。我认为问题在于showmen()
的实施。我认为PopupMenu.OnMenuItemClickListener
只是第一次被召唤,而不是每次都被召唤。