要实现不同类型和不同适配器的RecyclerView,可以按照以下步骤进行:
public class Item {
private String title;
private String subtitle;
private int image;
public Item(String title, String subtitle, int image) {
this.title = title;
this.subtitle = subtitle;
this.image = image;
}
public String getTitle() {
return title;
}
public String getSubtitle() {
return subtitle;
}
public int getImage() {
return image;
}
}
public class RecyclerViewAdapter extends RecyclerView.Adapter {
private List- itemList;
public RecyclerViewAdapter(List
- itemList) {
this.itemList = itemList;
}
@Override
public int getItemViewType(int position) {
// 根据需要返回不同的view type
// 例如,返回偶数为0的view type,奇数为1的view type
if (position % 2 == 0) {
return 0;
} else {
return 1;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 根据view type创建不同的ViewHolder
if (viewType == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type1, parent, false);
return new ViewHolderType1(view);
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type2, parent, false);
return new ViewHolderType2(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// 根据view type绑定不同的数据到ViewHolder上
if (holder instanceof ViewHolderType1) {
ViewHolderType1 viewHolderType1 = (ViewHolderType1) holder;
viewHolderType1.titleTextView.setText(itemList.get(position).getTitle());
viewHolderType1.subtitleTextView.setText(itemList.get(position).getSubtitle());
viewHolderType1.imageView.setImageResource(itemList.get(position).getImage());
} else if (holder instanceof ViewHolderType2) {
ViewHolderType2 viewHolderType2 = (ViewHolderType2) holder;
viewHolderType2.titleTextView.setText(itemList.get(position).getTitle());
viewHolderType2.subtitleTextView.setText(itemList.get(position).getSubtitle());
viewHolderType2.imageView.setImageResource(itemList.get(position).getImage());
}
}
@Override
public int getItemCount() {
return itemList.size();
}
// 第一个类型的ViewHolder
public class ViewHolderType1 extends RecyclerView.ViewHolder {
public TextView titleTextView;
public TextView subtitleTextView;
public ImageView imageView;
public ViewHolderType1(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.titleTextViewType1);
subtitleTextView = itemView.findViewById(R.id.subtitleTextViewType1);
imageView = itemView.findViewById(R.id.imageViewType1);
}
}
// 第二个类型的ViewHolder
public class ViewHolderType2 extends RecyclerView.ViewHolder {
public TextView titleTextView;
public TextView subtitleTextView;
public ImageView imageView;
public ViewHolderType2(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.titleTextViewType2);
subtitleTextView = itemView.findViewById(R.id.subtitleTextViewType2);
imageView = itemView.findViewById(R.id.imageViewType2);
}
}
}
创建布局文件 根据需要创建两个不同类型的item布局文件。例如,创建item_type1.xml和item_type2.xml布局文件,分别用于展示第一种类型和第二种类型的数据。
使用RecyclerView和适配器 最后,在你的Activity或Fragment中,实例化RecyclerView和适配器,并将适配器设置给RecyclerView。
RecyclerView recyclerView = findViewById(R.id.recyclerView);
List- itemList = new ArrayList<>();
// 添加数据到itemList中,包括不同类型的数据
RecyclerViewAdapter adapter = new RecyclerViewAdapter(itemList);
recyclerView.setAdapter(adapter);
通过以上步骤