1.Viewholder类
package com.example.yourdream.recyclerviewdemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* RecyclerView视图控制器
*
* Created by yourdream on 2016/11/17.
*/
public abstract class ViewHolder<T> extends RecyclerView.ViewHolder
{
protected Context mContext;
public ViewHolder(Context context, ViewGroup parent, int layoutId)
{
super(LayoutInflater.from(context).inflate(layoutId, parent, false));
mContext = context;
findView(itemView);
}
public ViewHolder(View itemView)
{
super(itemView);
}
/**
* 设置数据的接口,即将数据与View联系起来
*
* @param data
*/
public abstract void setData(T data);
/**
* 与适配器对应的控件初始化操作,需要子类扩展
* @param itemView
*/
public abstract void findView(View itemView);
}
2.基类适配器
package com.example.yourdream.recyclerviewdemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* RecyclerView适配器基类
*
* Created by yourdream on 2016/11/17.
*/
public class RecyclerViewBaseAdapter extends RecyclerView.Adapter<ViewHolder> {
protected Context context;
private List<ViewDataType> dataList;
private ViewDataType loadMoreVHModel;
private boolean showLoadMore;
public RecyclerViewBaseAdapter(Context context) {
this.context = context;
}
public void addData(List<? extends ViewDataType> append) {
getDataList().addAll(append);
}
public void addData(ViewDataType vhModel) {
List<ViewDataType> list = new ArrayList<>();
list.add(vhModel);
addData(list);
}
public void clean() {
getDataList().clear();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
return null;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.setData(getDataList().get(position));
}
@Override
public int getItemCount() {
return getDataList().size();
}
/**
* 获取视图类型,从数据中获取
* 即从数据中设定一个类型用来区分不同的视图
* @param position
* @return
*/
@Override
public int getItemViewType(int position)
{
return getDataList().get(position).getItemType();
}
public List<ViewDataType> getDataList() {
if (dataList == null) {
dataList = new ArrayList<>();
}
return dataList;
}
}
3.测试适配器
package com.example.yourdream.recyclerviewdemo;
import android.content.Context;
import android.view.ViewGroup;
import view.SigleTextView;
import view.TwoTextView;
/**
* 测试适配器1,用来实现一个listView其中每行一个文本
* 数据中的类型如果为1则创建一个文本,
* 如果为2创建一个包含2个文本
* Created by yourdream on 2016/11/17.
*/
public class Adapter1 extends RecyclerViewBaseAdapter
{
public Adapter1(Context context)
{
super(context);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
if (viewType == 1) {
SigleTextView sigleTextView = new SigleTextView(context, parent);
return sigleTextView;
}
if(viewType == 2)
{
return new TwoTextView(context, parent);
}
return super.onCreateViewHolder(parent,viewType);
}
}
package com.example.yourdream.recyclerviewdemo;
/**
* 视图数据类型,用来 区分不同的视图
*
* Created by yourdream on 2016/11/17.
*/
public interface ViewDataType {
int getItemType();
}
5.两种测试用的数据类型
package data;
import com.example.yourdream.recyclerviewdemo.ViewDataType;
/**
* Created by yourdream on 2016/11/17.
*/
public class SigleData implements ViewDataType{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Override
public int getItemType()
{
return 1;
}
}
package data;
import com.example.yourdream.recyclerviewdemo.ViewDataType;
/**
* Created by yourdream on 2016/11/17.
*/
public class TwoData implements ViewDataType{
private String name;
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int getItemType() {
return 2;
}
}
6.与数据对应的视图:
package view;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.yourdream.recyclerviewdemo.R;
import com.example.yourdream.recyclerviewdemo.ViewHolder;
import data.SigleData;
/**
* Created by yourdream on 2016/11/17.
*/
public class SigleTextView extends ViewHolder<SigleData>
{
private TextView name;
/**
* 重写基类方法,创建属于自己的视图
*
* @param context
* @param parent
*/
public SigleTextView(Context context, ViewGroup parent) {
super(context, parent, R.layout.view_sigle);
}
@Override
public void setData(SigleData data) {
name.setText(data.getName());
}
@Override
public void findView(View itemView) {
name = (TextView)itemView.findViewById(R.id.sigle);
}
}
package view;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.yourdream.recyclerviewdemo.R;
import com.example.yourdream.recyclerviewdemo.ViewHolder;
import data.TwoData;
/**
* Created by yourdream on 2016/11/17.
*/
public class TwoTextView extends ViewHolder<TwoData>{
private TextView name;
private TextView sex;
public TwoTextView(Context context, ViewGroup parent) {
super(context, parent, R.layout.view_two);
}
@Override
public void setData(TwoData data) {
name.setText(data.getName());
sex.setText(data.getSex());
}
@Override
public void findView(View itemView) {
name = (TextView)itemView.findViewById(R.id.two_name);
sex = (TextView)itemView.findViewById(R.id.two_sex);
}
}
mainactivity
package com.example.yourdream.recyclerviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import data.SigleData;
import data.TwoData;
public class MainActivity extends Activity {
private RecyclerView recyclerView;
private Adapter1 adapter1;
private Adapter1 adapter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//测试1
/* initData1();
addData1ToRecycView();*/
//测试2
/* initData2();
addData2ToRecycView();*/
//测试一个recyclaerview中同时展示不同的2种数据
add2DataToRecycView();
}
private void initView()
{
recyclerView = (RecyclerView)findViewById(R.id.test_recyclerView);
}
private void initData1()
{
adapter1 = new Adapter1(MainActivity.this);
List<ViewDataType> SigledataTypes = new ArrayList<>();
for(int i=0;i<5;i++)
{
SigleData sd = new SigleData();
sd.setName("liu"+i);
SigledataTypes.add(sd);
}
adapter1.addData(SigledataTypes);
}
/**
* 将数据1打到view上
*/
private void addData1ToRecycView()
{
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(adapter1);
}
private void initData2()
{
adapter2 = new Adapter1(MainActivity.this);
List<ViewDataType> TwodataTypes = new ArrayList<>();
for(int i=0;i<10;i++)
{
TwoData sd = new TwoData();
sd.setName("yang"+i);
sd.setSex( i % 2 ==0? "男":"女");
TwodataTypes.add(sd);
}
adapter2.addData(TwodataTypes);
}
/**
* 将数据2打到view上
*/
private void addData2ToRecycView()
{
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(adapter2);
}
private void add2DataToRecycView()
{
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false));
adapter2 = new Adapter1(MainActivity.this);
//第一中数据
List<ViewDataType> TwodataTypes = new ArrayList<>();
for(int i=0;i<10;i++)
{
TwoData sd = new TwoData();
sd.setName("yang"+i);
sd.setSex( i % 2 ==0? "男":"女");
TwodataTypes.add(sd);
}
adapter2.addData(TwodataTypes);
//第二种数据
List<ViewDataType> SigledataTypes = new ArrayList<>();
for(int i=0;i<5;i++)
{
SigleData sd = new SigleData();
sd.setName("liu"+i);
SigledataTypes.add(sd);
}
adapter2.addData(SigledataTypes);
recyclerView.setAdapter(adapter2);
}
}
源码:http://download.csdn.net/detail/d06110902002/9688344