现在我有几个按钮在点击时会执行不同的操作,但现在我希望其中一个按钮在点击时显示一个菜单,但我不知道该怎么做。
我的代码对于主按钮是这样的:
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()) {
case R.id.button1:
//do stuff
break;
case R.id.button2:
//display menu
break;
}
如果按下button2,我想显示一个选项列表,看看用户选择了哪个菜单项,但我该怎么做?
在菜单中显示图标 XML
<item
android:id="@+id/item_1"
android:icon="@drawable/settings"
android:showAsAction="always"
android:title="Add item1" />
答案 0 :(得分:2)
您可以使用PopupMenu
在onOptionsItemSelected()
中,当您点击其中一个菜单按钮时,它会显示不同的菜单。根据您的需要修改这段代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.button1:
// DO SOMETHING HERE
break;
case R.id.button2:
// THE R.id.button2 has to be the same as the item that will trigger the popup menu.
View v = findViewById(R.id.button2);
PopupMenu pm = new PopupMenu(LoginActivity.this, v);
pm.getMenuInflater().inflate(R.menu.pm_accounts_item, pm.getMenu());
pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(getApplicationContext(), String.valueOf(item.getTitle()), Toast.LENGTH_SHORT).show();
switch (item.getItemId()) {
case R.id.menuEdit:
break;
case R.id.menuDetails:
break;
case R.id.menuDelete:
break;
default:
break;
}
return true;
}
}); pm.show();
break;
default:
break;
}
return false;
}
您会注意到此菜单中的新菜单XML已被夸大:
pm.getMenuInflater().inflate(R.menu.pm_accounts_item, pm.getMenu());
您必须创建第二个菜单XML,其中包含单击其中一个按钮时需要显示的选项列表。这类似于您当前的菜单XML,区别在于一组不同的选项。
重要!强>
不要忘记在View v = findViewById(R.id.button2);
之前添加此PopupMenu pm....
。 PopupMenu需要View
来锚定自己。但onOptionsItemSelected()
方法根本不提供此功能。因此,额外的声明。
以上示例说明了Activity
中的示例。要在Fragment
中使用此功能,请将View v = findViewById(R.id.button2);
更改为View v = getActivity().findViewById(R.id.button2);
这是最终结果:
答案 1 :(得分:0)
如果您正在谈论打开选项菜单,那么openOptionMenu()课程中有Activity方法。
case R.id.button2:
openOptionsMenu();
break;
如果您正在谈论打开contextMenu 您必须致电openContextMenu()方法,但不要忘记添加registerForContextMenu(view)和其他采取行动的方法