RecyclerView(四)——用RecyclerView实现多种布局

  在显示列表时,我们需要的数据有可能需要不止一种item,对于有多种复杂数据的数据源,就需要以不同的样式显示出来,先看一下效果
这里写图片描述

  我们都知道,在ListView的Adapter中,我们可以通过重写int getItemViewType(int position)int getViewTypeCount()这两个方法来实现定义多种布局的type。那么在RecyclerView的Adapter中,是否也有类似的方法呢?
  没错,是有的,就是int getItemViewType(int position)方法。


  接下来,直接看代码

MultipleItemsAdapter.xml

package com.zou.zohar.recyclerviewdemo.ui.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.zou.zohar.recyclerviewdemo.R;
import com.zou.zohar.recyclerviewdemo.ui.model.ImageItem;
import com.zou.zohar.recyclerviewdemo.ui.model.MultipleItem;
import com.zou.zohar.recyclerviewdemo.ui.model.TextImageItem;
import com.zou.zohar.recyclerviewdemo.ui.model.TextItem;

import java.util.List;

/**
 * Created by Zohar on 2017/5/21.
 * desc:多种Item布局的Adapter
 */
public class MultipleItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
   
    /**
     * 定义三种Type
     */
    private final int ITEM_TYPE_TEXT = 0;
    private final int ITEM_TYPE_IMAGE = 1;
    private final int ITEM_TYPE_TEXT_IMAGE = 2;

    private Context mContext;
    private List<MultipleItem> dataList;

    public MultipleItemsAdapter(Context mContext, @NonNull List<MultipleItem> dataList) {
        this.mContext = mContext;
        this.dataList = dataList;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        /**
         * 根据不同的Type返回对应的ViewHolder
         */
        View view;
        if (viewType == ITEM_TYPE_TEXT) {
            view = LayoutInflater.from(mContext).inflate(R.layout.multiple_item_layout_text, parent, false);
            return new TextHolder(view);
        } else if (viewType == ITEM_TYPE_IMAGE) {
            view = LayoutInflater.from(mContext).inflate(R.layout.multiple_item_layout_image, parent, false);
            return new ImageHolder(view);
        } else if (viewType == ITEM_TYPE_TEXT_IMAGE) {
            view = LayoutInflater.from(mContext).inflate(R.layout.multiple_item_layout_text_image, parent, false);
            return new TextImageHolder(view);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        /**
         * 根据不同的Type,设置对应的ViewHolder
         */
        switch (dataList.get(position).getItemType()) {
            case TEXT:
                TextItem textItem = (TextItem) dataList.get(position);
                TextHolder textHolder = (TextHolder) holder;
                textHolder.tvText.setText(textItem.getText());
                break;
           
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值