반응형
프로그래밍 방식으로 PopupMenu 메뉴 항목 설정
나는 PopupMenu
연결하는 일반적인 방법이 사용하는 것임을 알고 popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu());
있습니다. 내 문제는 메뉴에 원하는 항목의 배열이 있고 Java에서 프로그래밍 방식으로 표현 수있는 것입니다. 어떻게 할 수 있습니까?
그냥 알아 냈어요. 이 같은 문제가 발생하는 사람은 다음과 같이합니다.
popup.getMenu().add(groupId, itemId, order, title);
MenuItem
추가하려는 추가 에 대해 .
아래에 팝업이 표시되는 팝업 메뉴를 만들고 getMenu () 메소드를 사용하여 값을 추가하면됩니다. 보여 주다 (); 잊지 마세요.
PopupMenu menu = new PopupMenu(this, view);
menu.getMenu().add("titleRes");
menu.show();
이 시도 :
Dynamic_PopUpMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu menu = new PopupMenu(DialogCheckBox.this, v);
menu.getMenu().add("AGIL");
menu.getMenu().add("AGILarasan");
menu.getMenu().add("Arasan");
menu.show();
}
});
popupmenu.xml에서 ID를 정의합니다.
<?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;
}
}
다음은 ID가 설정되고 처리되는 완전한 솔루션입니다.
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 등으로 만들고 싶은 경우 ...
@Voora Tarun이 좋은 대답을했고 이에 근거하여 대답했습니다. 먼저 가짜 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();
}
private void getPopup(final TextView textView, ArrayList<String> arrayList) {
final PopupMenu popupMenu = new PopupMenu(sContext, textView);
for (int i = 0; i < arrayList.size(); i++) {
popupMenu.getMenu().add(i, Menu.FIRST, i, arrayList.get(i));
}
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
textView.setText(item.getTitle());
return false;
}
});
popupMenu.show();
}
참고 URL : https://stackoverflow.com/questions/13784088/setting-popupmenu-menu-items-programmatically
반응형
'ProgramingTip' 카테고리의 다른 글
OpenVPN 연결 실패 /이 시스템의 모든 TAP-Win32 어댑터가 현재 사용 중입니다. (0) | 2020.11.23 |
---|---|
iPhone 유형을 확인하는 방법은 무엇입니까? (0) | 2020.11.22 |
오류 : 기호 변수 abc_ic_ab_back_mtrl_am_alpha를 사용할 수 없습니다. (0) | 2020.11.22 |
'this'포인터는 컴퓨터 메모리에 어디에 저장합니까? (0) | 2020.11.22 |
소수점 앞의 자릿수 가져 오기 (0) | 2020.11.22 |