2016-07-08 1 views
0

프로그래밍 방식으로 사용자 정의 항목보기가있는 작업 표시 줄 메뉴를 만들려고합니다. MenuItem.setActionView()가 작동하지 않습니다.

menu.xml 파일 : 메뉴의

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/action_category" 
     android:icon="@drawable/ic_category" 
     app:showAsAction="always|collapseActionView" 
     android:title="@string/category"> 
     <menu> 
     </menu> 
    </item> 
</menu> 

창조 :

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu, menu); 
    MenuItem category = menu.findItem(R.id.action_category); 
    Menu categoriesMenu = category.getSubMenu(); 
    Category[] items = Category.values(); 

    LayoutInflater baseInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    for (int i = 0; i < items.length; ++i){ 
     Category c = items[i]; 
     MenuItem item = categoriesMenu.add(i, c.id, 0, c.resourceText); 

     View myCustomView = baseInflater.inflate(R.layout.category_list_item, null); 
     ((ImageView)myCustomView.findViewById(R.id.icon)).setImageResource(c.resourceIcon); 

     item.setActionView(myCustomView); 
    } 
} 

그러나 setActionView()이 작동하지 않습니다. 표준 텍스트 전용 항목 만 생성됩니다. 누구든지 programatically 사용자 정의 레이아웃 메뉴 항목을 만드는 방법을 알고 있습니까?

+0

getActivity()를 호출합니다. 따라서이 코드를 프래그먼트에서 사용하고 있다고 가정합니다. 'setHasOptionsMenu (true);'메소드를 통해 프래그먼트에서 메뉴를 활성화합니까? – comrade

+0

예, 메뉴가 생성되었지만 사용자 정의가 아닌 기본 항목보기가 있습니다. – mol

답변

0

문서를 보면 은 MenuItem 자체를 반환하므로 기존 항목을 조작하지 않고 해당 작업보기로 새 항목을 반환합니다. - https://developer.android.com/reference/android/view/MenuItem.html#setActionView(android.view.View)

완전히 새로운 MenuItem을 반환하기 때문에 을 호출하고 컬렉션을 추가하기 전에 setActionView를 호출 해 볼 수 있습니다.

+0

응답 해 주셔서 감사합니다! 안타깝게도 솔루션이 작동하지 않습니다. 그리고 setActionView가 호출 된 후에'MenuItem'을 조작하지 않기 때문에 여러분과 내 스 니펫간에 큰 차이가없는 것으로 보입니다. – mol

+0

@mol 좋은 지적, 나는 지금 이것을 재고하고있다. 첫 단락에서 내가 의미했던 것을 이해하고 있니? 'setActionView()'는 새로운 메뉴 항목을 돌려주지 만 조작하지는 않기 때문에 카테고리에 추가하기 전에 * 호출해야합니다. – AdamMc331

+0

예, 이해했습니다. 것은'Menu'는'MenuItem'을 매개 변수로하는'add()'메소드를 가지고 있지 않습니다. – mol

관련 문제