天天看點

Recyclerview Adapter 的簡單封裝

最開始使用listview的時候有大神封裝了adapter,現在使用recyclerview,依葫蘆畫瓢對adapter進行了封裝,使用方法如下

如果是一種類型的item

public class StudentAdapter extends RecycleCommenAdapter<Student> {
    /**
     * @param context
     * @param list
     */
    public StudentAdapter(Context context, List<Student> list) {
        super(context, list, R.layout.item_student);
    }




    @Override
    public void convert(RecycleViewHolder holder, Student student) {

        holder.setText(R.id.tv_student_age,String.valueOf(student.getAge())).setText(R.id.tv_student_name, student.getName());

    }
}
           

如上所示,在構造方法裡中super方法中添加布局

在covert方法中适配資料就OK啦

如果是多種item的adapter

首先,重寫getItemViewType方法

@Override
	public int getItemViewType(int position) {
		return students.get(position).getAge() %2==0? ITEM_VIEW_TYPE_HEADER
				: ITEM_VIEW_TYPE_ITEM;
	}
           

我這裡測試根據學生年齡的不同傳回兩個不同的常量

然後根據VIewType的不同建立不同的viewholder

@Override
	public RecycleViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
		View view = null;
		if (arg1 == ITEM_VIEW_TYPE_HEADER) {
			view = LayoutInflater.from(context).inflate(
					R.layout.item_student, arg0, false);
		} else if (arg1 == ITEM_VIEW_TYPE_ITEM) {
			view = LayoutInflater.from(context).inflate(
					R.layout.item_student_mult, arg0, false);
		}
		return RecycleViewHolder.get(view);
	}
           

最後就是适配資料啦

@Override
	public void onBindViewHolder(RecycleViewHolder arg0, int arg1) {
		int itemViewType = getItemViewType(arg1);
		if (itemViewType == ITEM_VIEW_TYPE_HEADER) {
			arg0.setText(R.id.tv_student_name,students.get(arg1).getName());
			
		} else if (itemViewType == ITEM_VIEW_TYPE_ITEM) {
		}
		arg0.setText(R.id.tv_student_age,String.valueOf(students.get(arg1).getAge()));

	}
           

最後貼上完整的代碼

package com.example.master.customadapter.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.master.customadapter.R;
import com.example.master.customadapter.model.Student;
import java.util.ArrayList;


public class Multi_Item_Adapter extends RecyclerView.Adapter<RecycleViewHolder> {

	private ArrayList<Student> students;
	private Context context;
	private static final int ITEM_VIEW_TYPE_HEADER = 0;
	private static final int ITEM_VIEW_TYPE_ITEM = 1;

	public Multi_Item_Adapter(ArrayList<Student> sutdents, Context context) {
		super();
		this.students = sutdents;
		this.context = context;
	}

	@Override
	public int getItemCount() {
		return students.size();
	}

	@Override
	public void onBindViewHolder(RecycleViewHolder arg0, int arg1) {
		int itemViewType = getItemViewType(arg1);
		if (itemViewType == ITEM_VIEW_TYPE_HEADER) {
			arg0.setText(R.id.tv_student_name,students.get(arg1).getName());

		} else if (itemViewType == ITEM_VIEW_TYPE_ITEM) {
		}
		arg0.setText(R.id.tv_student_age,String.valueOf(students.get(arg1).getAge()));

	}

	@Override
	public RecycleViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
		View view = null;
		if (arg1 == ITEM_VIEW_TYPE_HEADER) {
			view = LayoutInflater.from(context).inflate(
					R.layout.item_student, arg0, false);
		} else if (arg1 == ITEM_VIEW_TYPE_ITEM) {
			view = LayoutInflater.from(context).inflate(
					R.layout.item_student_mult, arg0, false);
		}
		return RecycleViewHolder.get(view);
	}

	@Override
	public int getItemViewType(int position) {
		return students.get(position).getAge() %2==0? ITEM_VIEW_TYPE_HEADER
				: ITEM_VIEW_TYPE_ITEM;
	}

}
           

last  but  not the least    哈哈哈,當然是源碼位址了

github  位址  https://github.com/looooker/CustomAdapter

還有一位大神對adapter進行了更進一步的封裝,代碼邏輯都是一樣的,估計都是參考了同一位大神的代碼,

Recyclerview Adapter 的簡單封裝

同樣也貼上位址  https://github.com/mikepenz/FastAdapter