android - What is the best way to have different Objects in a recycler view? -
my recycler view
list of data youtube api
using gson
library. in 1 url, returned json
:
items: [ { kind: "youtube#playlist", etag: ""tag/abc"", id: "id",
notice id field string
the problem is, other url return :
items: [ { kind: "youtube#searchresult", etag: ""etag/abc"", id: { kind: "youtube#playlist", playlistid: "id" },
the id become class
.
the simplest way create different gson
models , different adapter
recycler view
. need call setadapter
multiple time, impact performance.
do have better workaround this?
thanks time
you don't need create multiple recyclerview.adapter
. recyclerview , listview can act same using @override
getitemviewtype(int position)
.
in adapter:
1. @override
getitemviewtype(int position)
. return final static int representing view type (like 1 or 0)
2. inflate correct view in oncreateviewholder(viewgroup parent, int viewtype)
viewtype.
3. in onbindviewholder
manage object type.
extended example adapter:
public class messageadapter extends recyclerview.adapter<messageadapter.viewholder> { public static final int view_type_normal = 0; public static final int view_type_footer = 1; private linkedlist<message> mdataset = new linkedlist<>(); @override public viewholder oncreateviewholder(viewgroup parent, int viewtype) { view v; // assume have same viewholder, prefer use 2 different viewholder make more sense if (viewtype == view_type_footer) { v = layoutinflater.from(parent.getcontext()) .inflate(r.layout.item_message_footer, parent, false); } else { v = layoutinflater.from(parent.getcontext()) .inflate(r.layout.item_message, parent, false); } return new viewholder(v); } @override public int getitemviewtype(int position) { // define here rule change view type according position , data return (position == mdataset.size()) ? view_type_footer : view_type_normal; } @override public void onbindviewholder(viewholder holder, int position) { // check position or instance of holder , change view data } }
Comments
Post a Comment