[英]How to add or remove option menu item on button click?
private static final int MY_MENU_1 = Menu.FIRST;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, MY_MENU_1, 0, "Hello").setShortcut('3', 'c');
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MY_MENU_1:
return true;
}
return super.onOptionsItemSelected(item);
}
我需要使用这些button
单击添加或删除我的optionmenuitem
只需根据您的条件更改视图可见性,如下所示:
btn.setOnClickListener(v->{
if(condition)
menu.findItem(R.id.id_name).setVisible(true);
else
menu.findItem(R.id.id_name).setVisible(false);
});
这样您就可以在运行时添加或删除它们。
PopupMenu popupMenu = new PopupMenu(YourActivity.this, view);
popupMenu.getMenu().add(1, R.id.complain_the_user, 3, R.string.complain_the_user);
popupMenu.getMenu().add(2, R.id.mute, 3, R.string.mute);
popupMenu.show();
菜单 -> popup_profile.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/block"
android:title="@string/block"/>
<item android:id="@+id/mute"
android:title="@string/mute"/>
<item android:id="@+id/complain_the_user"
android:title="@string/complain_the_user"/>
</menu>
您可以在 onCreateOptionsMenu() 中创建按钮时添加布尔变量:
private static Boolean condition = true;
@Override public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
if (condition) {
menu.add(0, MY_MENU_1, 0, "Hello").setShortcut('3', 'c');
}
return true;
}
然后,当单击项目时,您应该更改 onOptionsItemSelected() 中的变量并调用 invalidateOptionsMenu() 以重建菜单列表:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case MY_MENU_1:
condition = false;
invalidateOptionsMenu();
return true;
}
return super.onOptionsItemSelected(item);
}
您可以在 onCreateOptionsMenu 中扩充您的菜单,并且可以在 onPrepareOptionsMenu 中添加和删除(可见或不可见)。
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.MY_MENU_1, menu);
return true;
}
//choose visibility for menu item using displayItem= true/false
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem menuItem = menu.findItem(R.id.MY_MENU_1);
if(displayItem)
menuItem.setVisible(true);
else
menuItem.setVisible(false);
return super.onPrepareOptionsMenu(menu);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.