我有一个RecyclerView
,可以在运行时以列表、小网格或大网格的形式显示项目。根据用户选择的样式,我在onCreateViewHolder
中填充不同的布局。
我还使用layoutManger.setSpanSizeLookUp()
来在不同的样式之间切换。我的代码如下所示:
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if(showType == ProductAdapter.SHOW_TYPE_SMALL_GRID)
return 1;
else
return columnCount; //show one item per row
}
});
@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);
}
问题是我要强制调用onCreateViewHolder
,每次用户更改样式时都会创建一个新对象。还有其他方法吗?!强制调用onBindViewHolder()
以便重新调用。我只是使用adapter.notifyDataSetChanged()
。如何获得类似于onCreateViewHolder
的东西?
任何不使用多个适配器的解决方案都足够好!