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);
        }
    }
}

 

posted on 2019-05-27 22:44  HarperSun  阅读(501)  评论(0编辑  收藏  举报

导航