MenuItem.setActionView()不起作用

时间:2016-07-08 13:22:55

标签: android menuitem android-menu

我正在尝试以编程方式使用自定义项目视图制作操作栏菜单。

我的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()不起作用。仅创建标准文本项。有没有人知道如何以编程方式创建具有自定义布局的菜单项?

1 个答案:

答案 0 :(得分:0)

查看显示的文档setActionView会返回一个MenuItem本身,因此它不会操纵现有项目,而是返回带有该操作视图的新项目。 - https://developer.android.com/reference/android/view/MenuItem.html#setActionView(android.view.View)

由于它返回了一个全新的MenuItem,你可以尝试创建它并在之前调用setActionView 将它添加到你的集合中吗?

编辑:这是一个很糟糕的假设,只是因为一个项目被返回而没有发生任何操纵。请参阅下面的Renetik评论。