android - Why using LayoutInflater is not same to xml? -


i created layout

<linearlayout     android:id="@+id/list"     android:layout_width="0dp"     android:layout_height="wrap_content"     android:orientation="horizontal"     android:layout_margintop="10dp"     android:layout_marginbottom="20dp"     android:layout_weight=".7" >     <relativelayout         android:layout_width="70dp"         android:layout_height="wrap_content">         <imageview             android:id="@+id/icon"             android:layout_width="50dp"             android:layout_height="50dp"             android:layout_margintop="10dip"             android:layout_marginright="10dip"             android:layout_marginleft="10dip"             android:src="@mipmap/icon" />         <imageview             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_alignparenttop="true"             android:layout_alignparentright="true"             android:src="@mipmap/delete_button" />         <textview             android:layout_width="50dp"             android:layout_height="wrap_content"             android:gravity="center_horizontal"             android:textcolor="@android:color/white"             android:singleline="true"             android:textsize="10sp"             android:layout_centerhorizontal="true"             android:layout_margintop="5dp"             android:layout_below="@id/icon"             android:text="name"/>     </relativelayout> </linearlayout> 

the output is

enter image description here

when sure display correct, separate item xml file

mainactivity.xml

<linearlayout     android:id="@+id/list"     android:layout_width="0dp"     android:layout_height="wrap_content"     android:orientation="horizontal"     android:layout_margintop="10dp"     android:layout_marginbottom="20dp"     android:layout_weight=".7" > </linearlayout> 

item.xml

<?xml version="1.0" encoding="utf-8"?> <relativelayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="70dp"     android:layout_height="wrap_content">     <imageview         android:id="@+id/icon"         android:layout_width="50dp"         android:layout_height="50dp"         android:layout_margintop="10dip"         android:layout_marginright="10dip"         android:layout_marginleft="10dip"         android:src="@mipmap/icon" />     <imageview         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignparenttop="true"         android:layout_alignparentright="true"         android:src="@mipmap/delete_button" />     <textview         android:layout_width="50dp"         android:layout_height="wrap_content"         android:gravity="center_horizontal"         android:textcolor="@android:color/white"         android:singleline="true"         android:textsize="10sp"         android:layout_centerhorizontal="true"         android:layout_margintop="5dp"         android:layout_below="@id/icon"         android:text="name"/> </relativelayout> 

and add item in oncreate of mainactivity

layoutinflater inflater=layoutinflater.from(this); view view=inflater.inflate(r.layout.item, null, true); list.addview(view); //(r.id.list), linearlayout list 

now output is

enter image description here

and add many view linearlayout, still 1 view can added layout

layoutinflater inflater=layoutinflater.from(this); view view=inflater.inflate(r.layout.item, null, true); view view2=inflater.inflate(r.layout.other_item, null, true); list.addview(view); //(r.id.list), linearlayout list list.addview(view2); 

what correct way add view layout?

try instead:

view view = inflater.inflate(r.layout.item, list, false); list.addview(view); //(r.id.list), linearlayout list 

explanation:

the second argument inflate() intended parent of view inflated. when pass null second argument, inflated view not layoutparams because inflate() doesn't know parent , cannot create appropriate layoutparams (almost every viewgroup defines own layoutparams subclass).

when call addview(), linearlayout checks if child has layoutparams , whether of appropriate type. if not, generates default layoutparams set on view being added. whatever default gives child causing unexpected behavior.

in short, solution pass list instead of null when call inflate().


Comments

Popular posts from this blog

Android : Making Listview full screen -

javascript - Parse JSON from the body of the POST -

javascript - Chrome Extension: Interacting with iframe embedded within popup -