I have a recyclerview that can display items as a list, small grids or a large grid, and this can be changed at runtime. Depending on what style the user chooses, I inflate a different layout in onCreateViewHolder.
I also use layoutManger.setSpanSizeLookUp()
to switch between styles. My code is as follows:
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if(showType == ProductAdapter.SHOW_TYPE_SMALL_GRID)
return 1;
else
return columnCount;
}
});
@Override
public void onClick(View v) {
if(showType == ProductAdapter.SHOW_TYPE_SMALL_GRID)
showType = ProductAdapter.SHOW_TYPE_LARGE_GRID;
else
showType = ProductAdapter.SHOW_TYPE_SMALL_GRID;
int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
adapter = new ProductAdapter(getActivity(), productList, showType);
recyclerView.setAdapter(adapter);
layoutManager.scrollToPosition(firstVisibleItem);
}
The problem is getting the onCreateViewHolder to be called. I create a new object every time the user changes the style. Is there any other way ?! to get onBindViewHolder () to be called, I just use adapter.notifyDataSetChanged()
How can I get something like this for onCreateViewHolder?
Any solution that does not use multiple adapters is good enough!