Ответ 1
Просто понял это; для тех, кто сталкивается с той же проблемой, которую вы только что делаете:
popup.getMenu().add(groupId, itemId, order, title);
для каждого MenuItem
, который вы хотите добавить.
У меня есть PopupMenu
, и я знаю, что обычный способ связать меню с ним - это использовать popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu());
или что-то подобное. Моя проблема в том, что у меня есть набор элементов, которые я хочу в меню, и мне нужно иметь возможность их программно изменять на Java. Как я могу это сделать?
Спасибо!
Просто понял это; для тех, кто сталкивается с той же проблемой, которую вы только что делаете:
popup.getMenu().add(groupId, itemId, order, title);
для каждого MenuItem
, который вы хотите добавить.
Просто создайте всплывающее меню, регистрирующее представление, которое всплывающее окно будет отображать снизу, и используйте метод getMenu() для добавления значений. Не забудьте вызвать show();
PopupMenu menu = new PopupMenu(this, view);
menu.getMenu().add("titleRes");
menu.show();
Определяет идентификаторы в popupmenu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/slot1"
app:showAsAction="ifRoom|withText"
android:title="Movies"
android:visible="true"/>
<item
android:id="@+id/slot2"
app:showAsAction="ifRoom|withText"
android:title="Music"
android:visible="true"/>
<item
android:id="@+id/slot3"
app:showAsAction="ifRoom|withText"
android:title="Comedy"
android:visible="true"/>
</menu>
PopupMenu popupMenu = new PopupMenu(FullMenuActivity.this, view);
popupMenu.setOnMenuItemClickListener(FullMenuActivity.this);
popupMenu.getMenu().add(1, R.id.slot1, 1, "slot1");
popupMenu.getMenu().add(1,R.id.slot2,2,"slot2");
popupMenu.getMenu().add(1,R.id.slot3,3,"slot3");
popupMenu.show();
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.slot1:
SessionManager.selected_slot = item.getTitle().toString();
Toast.makeText(this, "slot1 Clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.slot2:
SessionManager.selected_slot = item.getTitle().toString();
Toast.makeText(this, "slot2 Clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.slot3:
SessionManager.selected_slot = item.getTitle().toString();
Toast.makeText(this, "slot3 Clicked", Toast.LENGTH_SHORT).show();
return true;
default:
return true;
}
}
да.! это поможет вам. Попробуйте следующее:)
Dynamic_PopUpMenu.setOnClickListener(новый View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu menu = new PopupMenu(DialogCheckBox.this, v);
menu.getMenu().add("AGIL");
menu.getMenu().add("Dash");
menu.getMenu().add("AGILarasan");
menu.getMenu().add("Arasan");
menu.show();
}
});
@Вура Тарун дал хороший ответ, и я основывал свой ответ на этом:
Сначала вместо использования фальшивых ресурсов mune.xml
я считаю, что лучший подход заключается в создании файла ids
:
ids.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="menuGroup" type="id"/>
<item name="menu1" type="id"/>
<item name="menu2" type="id"/>
<item name="menu3" type="id"/>
</resources>
Тогда вы можете сделать что-то подобное:
private void showPopup(final View anchor) {
PopupMenu popupMenu = new PopupMenu(anchor.getContext(), anchor);
popupMenu.getMenu().add(R.id.menuGroup, R.id.menu1, Menu.NONE, "slot1");
popupMenu.getMenu().add(R.id.menuGroup, R.id.menu1, Menu.NONE,"slot2");
popupMenu.getMenu().add(R.id.menuGroup, R.id.menu1, Menu.NONE,"slot3");
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(anchor.getContext(), item.getTitle() + "clicked", Toast.LENGTH_SHORT).show();
return true;
}
});
popupMenu.show();
}
Вот полное решение с установленными и обработанными идентификаторами:
this.findViewById(R.id.hamburger_menu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu menu = new PopupMenu(getApplicationContext(), v);
menu.getMenu().add(Menu.NONE, 1, 1, "Share");
menu.getMenu().add(Menu.NONE, 2, 2, "Comment");
menu.show();
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int i = item.getItemId();
if (i == 1) {
//handle share
return true;
} else if (i == 2) {
//handle comment
return true;
} else {
return false;
}
}
});
}
});
Примечание: общий ресурс и комментарии, например, также можно поместить константы для чисел 1,2, чтобы сделать код более удобочитаемым.
Кроме того, я помещаю Menu.NONE
, потому что мне не нужно группировать элементы меню. Если вы хотите создать группу группового набора id = 1, 2 и т.д.