What should I pass for root when inflating a layout to use for a MenuItem's ActionView?

actionview, android, android-layout, layout-inflater, menuitem

Solution

I would simply do it like this:

menuItem.setActionView(R.layout.action_view_layout);

Let Android inflate the view for you.

If you need to do some extra changes on this ImageView call

ImageView imageView = (ImageView) menuItem.getActionView();

Update

In order to cater to your curiosity. That is what folks from Google do under the hood:

public MenuItem setActionView(int resId) {
    final Context context = mMenu.getContext();
    final LayoutInflater inflater = LayoutInflater.from(context);
    setActionView(inflater.inflate(resId, new LinearLayout(context), false));
    return this;
}

Problem

I have an `ImageView` that I attach to a `MenuItem` as its `ActionView` (the item appears in the `ActionBar`). The layout for this view comes from XML. I'm inflating it like so: ``` ImageView actionView = (ImageView) layoutInflater.inflate( R.layout.action_view_layout, null); ``` This appears to work fine. However; passing null for `root` in the call to `inflate()` makes Lint yell at me: Avoid passing null as the view root (need to resolve layout parameters on the inflated layout's root element) I can seemingly manage without a root in my specific case, but I'd rather have the code be as correct as possible. The problem is, I'm not sure which `View` should be used as the root here. This answer says it should be "the widget that is surrounding the view objects that you want to inflate." But what does that mean here? The one for the action bar? The activity? Something else entirely? Update: Reading the answers has made me suspect me the right thing to do is: - Get the `ActionBar` `View` corresponding to the `MenuItem` - Get its root - Cast the root to a `ViewGroup` - Pass the result to the inflater This seems to work. Can anyone confirm or deny whether this is what should be done?

Original source

Related problems