2016-07-08 10 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() не работает. Создается только стандартный текст. Кто-нибудь знает, как программно создать элемент меню с настраиваемой компоновкой?

+0

Я вижу, что вы вызываете getActivity(), поэтому я предполагаю, что вы используете этот код в своем фрагменте. Включить меню в Фрагменте с помощью 'setHasOptionsMenu (true);' method? – comrade

+0

Да, меню создано, но с видом по умолчанию, а не обычным. – mol

ответ

0

Ознакомиться с документацией setActionView возвращает сам MenuItem, поэтому он не манипулирует существующим элементом, а возвращает новый элемент с этим видом действия. - https://developer.android.com/reference/android/view/MenuItem.html#setActionView(android.view.View)

Поскольку он возвращает совершенно новый MenuItem, вы можете попробовать его создать и вызвать setActionView до, вы добавляете его в свою коллекцию?

+0

Спасибо за ответ! К сожалению, ваше решение также не работает. И кажется, что между вашими и моими фрагментами нет большой разницы, потому что я не манипулирую 'MenuItem' после вызова' setActionView'. – mol

+0

@mol Хорошая мысль, я сейчас переосмысливаю это. Вы понимаете, что я имел в виду в первом абзаце? 'SetActionView()' возвращает новый пункт меню, а не манипулирует им, поэтому, возможно, это должно быть вызвано * до *, вы добавляете его в категорию? – AdamMc331

+0

Да, я понял. Дело в том, что 'Menu' не имеет метода' add() 'с параметром MenuItem'. – mol