How To Change The Viewtype Of A Recyclerview Item Onclick
Solution 1:
see my example:
// RecycleItemObject.javapublicclassRecycleItemObject {
publicstaticint LAYOUT_ITEM_PORTRAIN = 0;
publicstaticint LAYOUT_ITEM_LANDSCAPE = 1;
privateint type;
....................
/**
* @return get layout type of item
*/publicintgetType() {
return type;
}
/**
* set layout type of item
* @param type
*/publicvoidsetType(int type) {
this.type = type;
}
}
// adapterpublic Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if (viewType == RecycleItemObject.LAYOUT_ITEM_PORTRAIN) {
view = LayoutInflater.from(context).inflate(R.layout.item_recycle_view_main, parent, false);
} else {
view = LayoutInflater.from(context).inflate(R.layout.item_recycle_view_main_land, parent, false);
}
}
// event click item
@onClick....
curentObject.setType(RecycleItemObject.LAYOUT_ITEM_LANDSCAPE);
// notify item only
notifyItemChanged(itemPosition);
with me it work fine
Solution 2:
Hope you have figured out your problem. If not then,I have done it f or you. The buggy line is
@OverridepublicvoidonClick(View v) {
itemClickedState.add(getAdapterPosition(), clickedState.SHOW_SECONDARY_CONTENT);
}
Here what you are doing is adding a new Item to
itemClickedState.add(getAdapterPosition(), clickedState.SHOW_SECONDARY_CONTENT);
This will insert a new item and size of mdataList and itemClickState differs and hence mis matching happens.
Use itemClickedState.set(getAdapterPosition(), clickedState.SHOW_SECONDARY_CONTENT);
instead. And second thing I does not understand what tvTicketClass is . If it is a single TextView, then you should concatenate the string first and them do tvTicketClass.settext(concatenatedstrClass)
. Hope you get helped from this post.If have any further issue , please do comment.
Solution 3:
override getItemViewType in adapter and return itemtype you want. for more check out this link https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView
Post a Comment for "How To Change The Viewtype Of A Recyclerview Item Onclick"