How to inflate one view with a layout

AndroidAndroid LayoutLayout InflaterAndroid Inflate

Android Problem Overview


I have a layout defined in XML. It contains also:

<RelativeLayout
	android:id="@+id/item"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
/>

I would like to inflate this RelativeView with other XML layout file. I may use different layouts depending on a situation. How should I do it? I was trying different variations of

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

But none of them worked fine.

Android Solutions


Solution 1 - Android

I'm not sure I have followed your question- are you trying to attach a child view to the RelativeLayout? If so you want to do something along the lines of:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);

Solution 2 - Android

You inflate an XML resource. See the LayoutInflater doc .

If your layout is in a mylayout.xml, you would do something like:

View view; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);

RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item);

Solution 3 - Android

Though late answer, but would like to add that one way to get this

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	View view = layoutInflater.inflate(R.layout.mylayout, item );

where item is the parent layout where you want to add a child layout.

Solution 4 - Android

It's helpful to add to this, even though it's an old post, that if the child view that is being inflated from xml is to be added to a viewgroup layout, you need to call inflate with a clue of what type of viewgroup it is going to be added to. Like:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

The inflate method is quite overloaded and describes this part of the usage in the docs. I had a problem where a single view inflated from xml wasn't aligning in the parent properly until I made this type of change.

Solution 5 - Android

Even simpler way is to use

View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item

Solution 6 - Android

Try this code :

  1. If you just want to inflate your layout :

View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);   

  1. If you want to inflate your layout in container(parent layout) :

LinearLayout parent = findViewById(R.id.container); //parent layout. View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,parent,false); RelativeLayout item = view.findViewById(R.id.item); //initialize layout & By this you can also perform any event. parent.addView(view); //adding your inflated layout in parent layout.

Solution 7 - Android

layout inflation

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);

Solution 8 - Android

If you're not in an activity you can use the static from() method from the LayoutInflater class to get a LayoutInflater, or request the service from the context method getSystemService() too :

LayoutInflater i;
Context x;       //Assuming here that x is a valid context, not null

i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//OR
i = LayoutInflater.from(x);

(I know it's almost 4 years ago but still worth mentioning)

Solution 9 - Android

AttachToRoot Set to True

Just think we specified a button in an XML layout file with its layout width and layout height set to match_parent.

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>

On This Buttons Click Event We Can Set Following Code to Inflate Layout on This Activity.

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);

Hope this solution works for you.!

Solution 10 - Android

If you want to add a single view multiple time then you have to use

   layoutInflaterForButton = getActivity().getLayoutInflater();

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
        FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
        btnContainer.addView(btnView);
    }

If you do like

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

and

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

then it will throw exception of all ready added view.

Solution 11 - Android

If you are you trying to attach a child view to the RelativeLayout? you can do by following

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);

Solution 12 - Android

I had the hardest time with this error, because of my unique circumstances, but finally found a solution.

My situation: I am using a separate view (XML) which holds a WebView, then opens in an AlertDialog when I click a button in my main activity view. But somehow or another the WebView belonged to the main activity view (probably because I pull the resource from here), so right before I assigned it to my AlertDialog (as a view), I had to get the parent of my WebView, put it into a ViewGroup, then remove all the views on that ViewGroup. This worked, and my error went away.

// set up Alert Dialog box
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// inflate other xml where WebView is
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService
                (Context.LAYOUT_INFLATER_SERVICE);
View v = layoutInflater.inflate(R.layout.your_webview_layout, null);
final WebView webView = (WebView) v.findViewById(R.id.your_webview_id);

// more code...

.... later on after I loaded my WebView ....

// first, remove the parent of WebView from it's old parent so can be assigned a new one.
ViewGroup vg = (ViewGroup) webView.getParent();
vg.removeAllViews();

// put WebView in Dialog box
alert.setView(webView);
alert.show();

Solution 13 - Android

With Kotlin, you can use:

val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)

[your_main_layout].apply {
    //..
    addView(content)
}

Solution 14 - Android

When add a layout to an Activity in Kotlin, see these steps:

  1. Add just in Activity - One layout as a parent

  2. Xml file of new

  3. Layout Give the value of R.

    val parent: LinearLayout =findViewById(R.id.stars)

    val view =
        LayoutInflater.from(applicationContext).inflate(R.layout.another, parent,false)
    

Where parent is not necessary, can be null But warning message will be appear

view.findViewById<ImageView>(R.id.ivTimer).setImageResource(R.drawable.t2)

Any view must be set value in this way, finally add

parent.apply {  addView(view)}

Solution 15 - Android

I had used below snippet of code for this and it worked for me.

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMichal DymelView Question on Stackoverflow
Solution 1 - AndroidGraeme DuncanView Answer on Stackoverflow
Solution 2 - AndroidcchenesonView Answer on Stackoverflow
Solution 3 - AndroidShaista NaazView Answer on Stackoverflow
Solution 4 - AndroidMaximusView Answer on Stackoverflow
Solution 5 - AndroidAshish RawatView Answer on Stackoverflow
Solution 6 - AndroidRohit MhatreView Answer on Stackoverflow
Solution 7 - AndroidHappy SinghView Answer on Stackoverflow
Solution 8 - AndroidJuan CortésView Answer on Stackoverflow
Solution 9 - AndroideSparkBiz TeamView Answer on Stackoverflow
Solution 10 - AndroidJohn smithView Answer on Stackoverflow
Solution 11 - AndroidKasim RangwalaView Answer on Stackoverflow
Solution 12 - AndroidAzurespotView Answer on Stackoverflow
Solution 13 - AndroidHasan A YousefView Answer on Stackoverflow
Solution 14 - AndroidMoriView Answer on Stackoverflow
Solution 15 - AndroidSFDCCoderView Answer on Stackoverflow