android - ViewHolderHeader cannot be cast in onBindViewHolder viewholder -
why having error ?
java.lang.classcastexception: com.example.pc.mytest.mainitemsrcvadapter$viewholderheader cannot cast com.example.pc.mytest.mainitemsrcvadapter$viewholder
i trying have recycler 1 header , 1 horizontal.
this class:
public class mainitemsrcvadapter extends recyclerview.adapter<recyclerview.viewholder> { private arraylist<listmainitem> mainitems; private context mcontext; private static final int type_header = 0; private static final int type_item = 1; public mainitemsrcvadapter(context context,arraylist<listmainitem> maindata) { setmaindata(maindata); this.mainitems = maindata; this.mcontext = context; } public void setmaindata(arraylist<listmainitem> maindatahorizon) { this.mainitems = maindatahorizon; } public arraylist<listmainitem> getmaindata() { return mainitems; } @override public recyclerview.viewholder oncreateviewholder(viewgroup viewgroup, int viewtype) { if (viewtype == type_item) { //inflate layout , pass view holder view v = layoutinflater.from(viewgroup.getcontext()).inflate(r.layout.main_adapter_horizontal, viewgroup, false); return new viewholder(v); } else if (viewtype == type_header) { //inflate layout , pass view holder view v = layoutinflater.from(viewgroup.getcontext()).inflate(r.layout.main_item_adapter, viewgroup, false); return new viewholderheader(v); } throw new runtimeexception("there no type matches type " + viewtype + " + make sure using types correctly"); } @override public void onbindviewholder(recyclerview.viewholder holder, int i) { if (holder instanceof viewholder) { // string name = getdatavertical().get(position-1).getimages(); string name =mainitems.get(i).geimgname(); string urlimage =mainitems.get(i).getimgurl(); ((viewholder) holder).tv_items.settext(mainitems.get(i).geimgname()); // holder.tv_items.settext(mainitems.get(i).geimgname()); log.d("###", "setting name: " + name); picasso.with(mcontext) .load(r.drawable.upload).resize(240, 120) .into(((viewholder) holder).img_items); log.d("###", "setting url: " + urlimage); } else if (holder instanceof viewholderheader) { //cast holder vhheader , set data header. ((viewholder) holder).tv_items.settext(mainitems.get(i).geimgname()); log.d("####", "header"); } // // viewholder.tv_items.settext(mainitems.get(i).geimgname()); // picasso.with(mcontext) // .load(mainitems.get(i) // .getimgurl()).resize(240, 120) // .into(viewholder.img_items); } @override public int getitemcount() { return mainitems.size(); } @override public int getitemviewtype(int position) { if (ispositionheader(position)) { return type_header; } return type_item; } private boolean ispositionheader(int position) { return position == 0; } public class viewholder extends recyclerview.viewholder{ private textview tv_items; private imageview img_items; private imageview mdataimgview; public viewholder(view view) { super(view); tv_items = (textview)view.findviewbyid(r.id.tv_items_horz); img_items = (imageview) view.findviewbyid(r.id.img_items_horz); } public imageview getmdataimgview() { return mdataimgview; } } public class viewholderheader extends recyclerview.viewholder{ private final recyclerview mhorizontalrecyclerview; public viewholderheader(view v) { super(v); mhorizontalrecyclerview = (recyclerview) v.findviewbyid(r.id.recycler_view_horizontal); mainitemsrcvadapterhorizontal madapter = new mainitemsrcvadapterhorizontal(getmaindata(), mcontext); linearlayoutmanager layoutmanager = new linearlayoutmanager(mcontext, linearlayoutmanager.horizontal, false); mhorizontalrecyclerview.setlayoutmanager(layoutmanager); mhorizontalrecyclerview.setadapter(madapter); } } }
this horizontal
public class mainitemsrcvadapterhorizontal extends recyclerview.adapter<recyclerview.viewholder> { private final arraylist<listmainitem> mdata; private final context mcontext; public mainitemsrcvadapterhorizontal(arraylist<listmainitem> datahorizontal,context context) { mdata = datahorizontal; mcontext=context; } @override public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) { view v = layoutinflater.from(parent.getcontext()).inflate(r.layout.main_adapter_horizontal, parent, false); return new mainitemsrcvadapterhorizontal.myviewholderheader(v); } @override public void onbindviewholder(recyclerview.viewholder holder, int position) { string name = mdata.get(position).geimgname(); log.d("###", "setting name: " + name); // ((recyclerviewadapterhorizontal.myviewholderheader) holder).getmdatatextview().settext(name); ((mainitemsrcvadapterhorizontal.myviewholderheader) holder).getmdataimgview().setimageresource(mcontext.getresources().getidentifier(name, "drawable", "com.example.mohamadmouazen.lebgame.adapters")); } @override public int getitemcount() { return mdata.size(); } private class myviewholderheader extends recyclerview.viewholder { // private final textview mdatatextview; private final imageview mdataimgview; public myviewholderheader(view v) { super(v); // mdatatextview = (textview) v.findviewbyid(r.id.data_vertical); mdataimgview = (imageview) v.findviewbyid(r.id.img_items_horz); } public imageview getmdataimgview() { return mdataimgview; } /* public textview getmdatatextview() { return mdatatextview; }*/ } }
because making invalid casting.
check code:
} else if (holder instanceof viewholderheader) { //cast holder vhheader , set data header. ((viewholder) holder).tv_items.settext(mainitems.get(i).geimgname()); log.d("####", "header"); }
you casting viewholderheader
viewholder
Comments
Post a Comment