2012-12-09 34 views
43

Tôi có một số PopupMenu và tôi biết cách thông thường để kết hợp trình đơn với nó là sử dụng popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu()); hoặc một số nội dung tương tự. Vấn đề của tôi là, tôi có một loạt các mục mà tôi muốn trong trình đơn và tôi cần để có thể thay đổi chúng theo lập trình trong Java. Tôi có thể làm cái này như thế nào?Đặt các mục menu PopupMenu theo lập trình

Cảm ơn bạn!

Trả lời

93

Chỉ cần tìm ra; đối với bất kỳ ai gặp phải vấn đề tương tự này, bạn chỉ cần thực hiện:

popup.getMenu().add(groupId, itemId, order, title); 

cho mỗi MenuItem bạn muốn thêm.

23

Chỉ cần tạo menu bật lên đăng ký chế độ xem cửa sổ bật lên sẽ hiển thị bên dưới và sử dụng phương thức getMenu() để thêm giá trị. Đừng quên gọi show();

PopupMenu menu = new PopupMenu(this, view); 

menu.getMenu().add("titleRes"); 
menu.show(); 
11

Xác id trong 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; 
     } 
    } 
2

@Voora Tarun đã đưa ra một câu trả lời tốt, và tôi có trụ sở câu trả lời của tôi trên nó: Đầu tiên thay vì sử dụng fa ke mune.xml nguồn lực, tôi nghĩ rằng cách tiếp cận tốt hơn là tạo ra ids tập tin thay vì:

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> 

Sau đó, bạn có thể làm một cái gì đó như thế:

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(); 
    } 
2

Đây là một giải pháp hoàn chỉnh với ID thiết và được xử lý:

 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; 
        } 
       } 

      }); 
     } 
    }); 

Lưu ý: Ví dụ: chia sẻ và nhận xét, bạn cũng có thể đặt hằng số cho các số 1,2 để làm cho mã dễ đọc hơn.

Ngoài ra, tôi đặt Menu.NONE vì tôi không quan tâm đến việc nhóm các mục menu. Trong trường hợp bạn muốn đặt nhóm nhóm được đặt id = 1, 2, v.v ...

12

yup.! nó sẽ giúp bạn. Hãy thử :)

Dynamic_PopUpMenu.setOnClickListener này (mới 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(); 
     } 
    }); 
Các vấn đề liên quan