【发布时间】:2015-10-26 07:38:01
【问题描述】:
我有一个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? 类似的东西
任何不使用多个适配器的解决方案都足够好!
【问题讨论】:
-
您说“不使用多个适配器”很好。更换适配器不是一个好的解决方案。
标签: android android-adapter android-recyclerview