android - how to have variable row height in recyclerview -
i trying create recyclerview in nav drawer header showing profile information. have header height more other row elements. below header layout
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp" android:background="@color/green" android:orientation="vertical" android:weightsum="1"> <linearlayout android:layout_width="match_parent" android:layout_height="56dp" android:orientation="vertical" android:layout_alignparentbottom="true" android:layout_alignparentleft="true" android:layout_alignparentstart="true"> <textview android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="16dp" android:textcolor="#ffffff" android:text="xxxxx" android:textsize="32sp" android:textstyle="bold" /> </linearlayout> </relativelayout>
when set header of recycler view , 200dp height not reflecting in ui
recyclerview.adapter<navdrawerlistviewholder> adapter = new navdrawerlistadapter(this,titles,this); navlist.setadapter(adapter);
below adapter recyclerview :
public class navdrawerlistadapter extends recyclerview.adapter<navdrawerlistviewholder> { private static final int type_header = 0; private static final int type_item = 1; context mcontext; string[] mcharacterlist; ilistitemclicklistener mlistener; int holderviewtype=0; public navdrawerlistadapter(context context, string[] characters, ilistitemclicklistener clicklistener) { mcontext = context; mcharacterlist = characters; mlistener = clicklistener; } @override public navdrawerlistviewholder oncreateviewholder(viewgroup parent, int viewtype) { navdrawerlistviewholder viewholder; holderviewtype = viewtype; if(viewtype == type_header) { view v = layoutinflater.from(mcontext).inflate(r.layout.header,null); viewholder = new navdrawerlistviewholder(v,type_header,mlistener); } else { view v = layoutinflater.from(mcontext).inflate(r.layout.nav_item_row,null); viewholder = new navdrawerlistviewholder(v,type_item,mlistener); } return viewholder; } @override public void onbindviewholder(navdrawerlistviewholder holder, int position) { if(holderviewtype == type_header) { typeface typeface = typeface.createfromasset(mcontext.getassets(), "roboto-thin.ttf"); holder.name.settypeface(typeface); } else { holder.charactername.settext(mcharacterlist[position - 1]); } } @override public int getitemviewtype(int position) { if (position == 0) { return type_header; } return type_item; } @override public int getitemcount() { return mcharacterlist.length + 1; }
replace:
layoutinflater.from(mcontext).inflate(r.layout.header,null);
with:
layoutinflater.from(mcontext).inflate(r.layout.header, parent, false);
and same other inflate()
calls. if know parent container layout being inflated, supply inflate()
call. in particular, relativelayout
needs this, if root view of layout being inflated.
also, consider using getlayoutinflater()
on activity
instead of layoutinflater.from()
. may if pass activity
from()
equivalent results. however, in general, want use layoutinflater
knows activity
, theme, right results.
Comments
Post a Comment