问题的解决方法是使用RecyclerView.Adapter的getItemViewType方法返回基于数据的视图类型。然后,可以使用不同的布局来显示不同的大小和其他属性。
示例代码:
@Override public int getItemViewType(int position) { // 根据数据返回视图类型 if (data.get(position).getSize() == Large) { return 1; } else { return 0; } }
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // 创建不同的ViewHolder,根据视图类型 if (viewType == 0) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.small_item, parent, false); return new SmallViewHolder(itemView); } else { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.large_item, parent, false); return new LargeViewHolder(itemView); } }
class SmallViewHolder extends RecyclerView.ViewHolder { // ...
public SmallViewHolder(View itemView) {
super(itemView);
// ...
}
}
class LargeViewHolder extends RecyclerView.ViewHolder { // ...
public LargeViewHolder(View itemView) {
super(itemView);
// ...
}
}