2013-02-06 29 views
37

Tôi có một ActionBar với một mục tác vụ trên đó. Sau khi nhấp vào mục tác vụ, tôi muốn hiển thị menu bật lên. Tôi đã triển khai phương pháp này, nhưng tôi muốn neo nó vào mục tác vụ hoặc đến ActionBar, không phải bất kỳ chế độ xem nào từ bố cục. Làm thế nào để có được một số loại xem để neo nó từ MenuItem?Hiển thị menu bật lên trên mục `ActionBar` nhấp

public boolean onOptionsItemSelected(MenuItem item) { 
    PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here? 
    popupMenu.inflate(R.menu.counters_overflow); 
    popupMenu.show(); 
    // ... 
    return true; 
} 
+0

Tôi đang làm điều gì đó tương tự TẠI ĐÂY !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

Trả lời

94

Vì vậy, cuối cùng tôi đã tìm thấy giải pháp. Khi bạn muốn neo popupmenu vào ActionItem trong ActionBar, bạn cần tìm view để render ActionItem. Chế độ xem tìm đơn giản với findViewById() trong đó id giống với id của mục menu của bạn trong xml.

POPUP DISPLAYING:

public boolean onOptionsItemSelected(MenuItem item) { 
    // ... 

    View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID 
    PopupMenu popupMenu = new PopupMenu(this, menuItemView); 
    popupMenu.inflate(R.menu.counters_overflow); 
    // ... 
    popupMenu.show(); 
    // ... 
    return true; 
} 

MENU:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    .... 

    <item 
    android:id="@+id/menu_overflow" 
    android:icon="@drawable/ic_overflow" 
    android:showAsAction="ifRoom" 
    android:title="@string/menu_overflow"/> 

    .... 

</menu> 

Nếu mục menu không hiển thị (là trong overflow) nó không hoạt động. findViewById trả về null vì vậy bạn phải kiểm tra tình trạng này và neo đến một khung nhìn khác.

+8

findViewById (R.id.menu_overflow) cung cấp cho tôi chế độ xem rỗng – ingsaurabh

+5

findViewById (R.id.menu_overflow) cung cấp null nếu bạn thấy trong chế độ xem gốc không hoạt động. sử dụng Activity.findViewById (R.id.menu_overflow) và mọi thứ ok =)) – maXp

+0

là nó có thể thêm một dải phân cách giữa các mục cụ thể trong popupMenu không? –

-2
public boolean onOptionsItemSelected(MenuItem item) { 
    final View addView = getLayoutInflater().inflate(R.layout.add, null); 

      new AlertDialog.Builder(this).setTitle("Add a Word").setView(addView) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          addWord((TextView) addView.findViewById(R.id.title)); 
         } 
        }).setNegativeButton("Cancel", null).show(); 
return (super.onOptionsItemSelected(item)); 
    } 

lấy mẫu nguồn đầy đủ ở đây ..

http://vimaltuts.com/android-tutorial-for-beginners/android-action-bar-tab-menu-example

+0

Xin lỗi tôi muốn tìm đúng cách sử dụng cho PopupMenu được tạo khi ActionItem nhấp vào. Không có cách giải quyết. – pcu

+0

Câu hỏi đặt ra là về PopupMenu chứ không phải AlertDialog. – JaydeepW

Các vấn đề liên quan