RecyclerView多种类型Item的Demo
一、数据
public class Multiple { private int itemType; private String itemName; public int getItemType() { return itemType; } public void setItemType(int itemType) { this.itemType = itemType; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } }
二、在activity中
private List<Multiple> initData() { List<Multiple> multiples = new ArrayList<>(); for (int i = 0; i < 50; i ++){ Multiple multiple = new Multiple(); int a = i % 2; if (a == 0){ multiple.setItemType(0); multiple.setItemName("条目0"); }else { multiple.setItemType(1); multiple.setItemName("条目1"); } multiples.add(multiple); } return multiples; } private void initView() { List<Multiple> multiples = initData(); RecyclerView recyclerView = findViewById(R.id.recycler_view); LinearLayoutManager layoutManager = new LinearLayoutManager(this ); recyclerView.setLayoutManager(layoutManager); layoutManager.setOrientation(OrientationHelper. VERTICAL); MultipleItemAdapter adapter = new MultipleItemAdapter(MultipleRecyclerViewActivity.this); adapter.setData(multiples); recyclerView.setAdapter(adapter); }
三、在Adapter中
public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final static int ITEM_TYPE_ONE = 0; private final LayoutInflater mLayoutInflater; private List<Multiple> multiples; public MultipleItemAdapter(Context context){ mLayoutInflater = LayoutInflater.from(context); } public void setData(List<Multiple> multiples){ this.multiples = multiples; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { if (viewType == ITEM_TYPE_ONE){ return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, viewGroup, false)); }else { return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, viewGroup, false)); } } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { if (viewHolder instanceof TextViewHolder){ TextViewHolder textViewHolder = (TextViewHolder) viewHolder; textViewHolder.itemOne.setText(multiples.get(i).getItemName()); }else if (viewHolder instanceof ImageViewHolder){ ImageViewHolder imageViewHolder = (ImageViewHolder) viewHolder; imageViewHolder.itemTwo.setText(multiples.get(i).getItemName()); } } @Override public int getItemViewType(int position) { return multiples.get(position).getItemType(); } @Override public int getItemCount() { return multiples.size(); } public static class TextViewHolder extends RecyclerView.ViewHolder{ TextView itemOne; public TextViewHolder(@NonNull View itemView) { super(itemView); itemOne = itemView.findViewById(R.id.item_text); } } public static class ImageViewHolder extends RecyclerView.ViewHolder{ TextView itemTwo; public ImageViewHolder(@NonNull View itemView) { super(itemView); itemTwo = itemView.findViewById(R.id.item_image); } } }