android - RecyclerView onCreateViewHolder Return Type Incompatibility With Multiple Custom ViewHolders -


i'm trying use multiple viewholders in recyclerview in order swap these views out @ run time. have created 2 classes extend recyclerview.viewholder:

menuitemviewholder

public class menuitemviewholder extends recyclerview.viewholder implements view.onclicklistener {  public textview menuitemtext; public imageview menuitemphoto; public recyclerviewadapter rva;  public menuitemviewholder(view itemview) {     super(itemview);     itemview.setonclicklistener(this);      rva = caller;     menuitemtext = (textview) itemview.findviewbyid(r.id.grid_text);     menuitemphoto = (imageview) itemview.findviewbyid(r.id.grid_image); }  @override public void onclick(view view) {     toast.maketext(view.getcontext(), "clicked position = " + getposition(), toast.length_short).show();  } 

}

selecteditemviewholder

public class selecteditemviewholder extends recyclerview.viewholder implements view.onclicklistener {  public textview menuitemtext; public imageview menuitemphoto; public recyclerviewadapter rva;  public selecteditemviewholder(view itemview) {     super(itemview);     itemview.setonclicklistener(this);      menuitemtext = (textview) itemview.findviewbyid(r.id.grid_text_full);     menuitemphoto = (imageview) itemview.findviewbyid(r.id.grid_image_full); }  @override public void onclick(view view) {     toast.maketext(view.getcontext(), "clicked position = " + getposition(), toast.length_short).show(); } 

}

they called within recyclerviewadapter class's oncreateviewholder function:

recyclerviewadapter oncreateviewholder

// create new views (invoked layout manager)     @override     public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {         switch (viewtype) {             case 0:                 view griditemlayout = layoutinflater.from(parent.getcontext())                         .inflate(r.layout.grid_single, parent, false);                 // set view's size, margins, paddings , layout parameters                 menuitemviewholder vh = new menuitemviewholder(griditemlayout);             case 2:                 view selecteditemlayout = layoutinflater.from(parent.getcontext())                         .inflate(r.layout.grid_single_full, parent, false);                 // set view's size, margins, paddings , layout parameters                 selecteditemviewholder sivh = new selecteditemviewholder(selecteditemlayout);                 return sivh;         }     } 

when try run code, error:

error:(48, 36) error: oncreateviewholder(viewgroup,int) in recyclerviewadapter cannot override oncreateviewholder(viewgroup,int) in adapter return type viewholder not compatible menuitemviewholder vh type-variable: vh extends viewholder declared in class adapter

so, issue seems oncreateviewholder doesn't accept custom classes being inherited recyclerview.viewholder. i'm using android studio, perhaps issue there. i'm perplexed, since thought java inheritance handle no problems. please propose solution?

edit: when change return type of oncreateviewholder menuitemviewholder 1 vh, things work fine. however, doesn't work when have multiple vh classes can swapped @ time.

the recyclerview.adapter parameterized class takes in single viewholder type. definition looks like:

public class recyclerviewadapter extends recyclerview.adapter<recyclerviewadapter.menuitemviewholder> 

it should be:

public class recyclerviewadapter extends recyclerview.adapter<recyclerview.viewholder> 

don't forget have right definition onbindviewholder well. need override getitemviewtype well.


Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -