RecylerAdapter
public abstract class RecylerCommonAdapter<DATA> extends RecyclerView.Adapter<ViewHolder> {
private Context mContext;
private LayoutInflater mLayoutInflater;
private List<DATA> mData;
private int mLayoutId;
private MuliteSupport mTypeSupport;
public RecylerCommonAdapter(Context context, List<DATA> data, int layoutId) {
mLayoutInflater = LayoutInflater.from(context);
this.mContext = context;
this.mData = data;
this.mLayoutId = layoutId;
}
public RecylerCommonAdapter(Context context, List<DATA> data, MuliteSupport typeSupport) {
this(context, data, -1);
this.mTypeSupport = typeSupport;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(mTypeSupport!=null){
mLayoutId=viewType;
}
View itemView = mLayoutInflater.inflate(mLayoutId, parent, false);
return new ViewHolder(itemView);
}
@Override
public int getItemViewType(int position) {
//多布局
if(mTypeSupport!=null){
return mTypeSupport.getLayoutId(mData.get(position));
}
return super.getItemViewType(position);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
convert(holder, mData.get(position), position);
}
public abstract void convert(ViewHolder holder, DATA item, int position);
@Override
public int getItemCount() {
return mData.size();
}
}
ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
private SparseArray<View> mViews;
public ViewHolder(View itemView) {
super(itemView);
mViews = new SparseArray<>();
}
/**
* 减少findviewById的次数
*/
public <T extends View> T getView(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
//封装一些通用的,比如setText()
/**
* 设置文本
*/
public ViewHolder setText(int viewId, CharSequence text) {
TextView tv = getView(viewId);
tv.setText(text);
return this;
}
/**
* 设置图片资源
*/
public ViewHolder setImageResource(int viewId, int resourceId) {
ImageView imageView = getView(viewId);
imageView.setImageResource(resourceId);
return this;
}
//图片处理问题 路径问题 用到第三方 imageLoader Glide xutils Picasso
//不能够直接使用第三方的图片加载
//最终采用的方式使用自己的一套规范
public ViewHolder setImagePath(int viewId,HolderImageLoader imageLoader) {
ImageView imageView = getView(viewId);
imageLoader.imageLoader(imageView,imageLoader.getPath());
return this;
}
public abstract static class HolderImageLoader{
private String mPath;
public HolderImageLoader(String path){
this.mPath=path;
}
public abstract void imageLoader(ImageView imageView,String path);
public String getPath() {
return mPath;
}
}
}
itemClickListener:点击事件的处理
public interface ItemClickListener {
void setOnItemClickListener(int position);
}
ItemLongClickListener:长按事件处理
public interface ItemLongClickListener {
boolean setOnItemLongClickListener(int position);
}
MuliteSupport
public interface MuliteSupport<DATA> {
public int getLayoutId(DATA data);//根据不同数据显示不同的布局
}
以上就封装差不多了
以显示图片为案例
public class BaseImageActivity extends Activity {
private RecyclerView mRecyclerView;
private List<String> mDatas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base_image);
initData();
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
// 指定显示的样式 LinearLayoutManager --> listView样式
// GridLayoutManager GridView样式
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置适配器
RecyclerViewAdapter1 adapter = new RecyclerViewAdapter1(this, mDatas);
mRecyclerView.setAdapter(adapter);
//添加分割线
mRecyclerView.addItemDecoration(new LinearLayoutItemDecoration(this, R.drawable.item_driver_01));
adapter.setItemClickListener(new ItemClickListener() {
@Override
public void setOnItemClickListener(int position) {
Toast.makeText(BaseImageActivity.this, "单击->" + mDatas.get(position), Toast.LENGTH_SHORT).show();
}
});
adapter.setItemLongClickListener(new ItemLongClickListener() {
@Override
public boolean setOnItemLongClickListener(int position) {
Toast.makeText(BaseImageActivity.this, "长按->" + mDatas.get(position), Toast.LENGTH_SHORT).show();
return true;//消费点击事件
}
});
}
private void initData() {
mDatas = new ArrayList<>();
mDatas.add(ImageUrl.image1);
mDatas.add(ImageUrl.image2);
mDatas.add(ImageUrl.image3);
mDatas.add(ImageUrl.image4);
mDatas.add(ImageUrl.image5);
mDatas.add(ImageUrl.image7);
mDatas.add(ImageUrl.image6);
mDatas.add(ImageUrl.image8);
mDatas.add(ImageUrl.image9);
mDatas.add(ImageUrl.image10);
mDatas.add(ImageUrl.image11);
mDatas.add(ImageUrl.image12);
mDatas.add(ImageUrl.image13);
mDatas.add(ImageUrl.image14);
mDatas.add(ImageUrl.image15);
mDatas.add(ImageUrl.image16);
mDatas.add(ImageUrl.image17);
mDatas.add(ImageUrl.image18);
mDatas.add(ImageUrl.image19);
mDatas.add(ImageUrl.image20);
}
}
测试图片的接口
public class ImageUrl {
public static final String image1="http://p4.so.qhmsg.com/bdr/_240_/t0157596cfec8884249.jpg";
public static final String image2="http://p3.so.qhimgs1.com/bdr/_240_/t0125644adcf2cb71d3.jpg";
public static final String image3="http://p3.so.qhimgs1.com/bdr/_240_/t01d31b4df909c2aa13.jpg";
public static final String image4="http://p0.so.qhmsg.com/bdr/_240_/t011fc15c16f31bb545.jpg";
public static final String image5="http://p4.so.qhmsg.com/bdr/_240_/t0187439344feb62039.jpg";
public static final String image6="http://p4.so.qhmsg.com/bdr/_240_/t01c867a331ee601f09.jpg";
public static final String image7="http://p1.so.qhimgs1.com/bdr/_240_/t01d207c6bb9e46c6b1.jpg";
public static final String image8="http://p0.so.qhmsg.com/bdr/_240_/t01d5ada99254f1b685.jpg";
public static final String image9="http://p0.so.qhimgs1.com/bdr/_240_/t019aa0ed00b08bc6ec.jpg";
public static final String image10="http://p1.so.qhmsg.com/bdr/_240_/t011a45058123590d96.jpg";
public static final String image11="http://p0.so.qhmsg.com/bdr/_240_/t015a2d44aeee1bcf7f.jpg";
public static final String image12="http://p1.so.qhimgs1.com/bdr/_240_/t01c55edc357b953b51.jpg";
public static final String image13="http://p1.so.qhimgs1.com/bdr/_240_/t017e236ece120c9721.jpg";
public static final String image14="http://p1.so.qhmsg.com/bdr/_240_/t01c9af3809a7b74ec6.jpg";
public static final String image15="http://p3.so.qhmsg.com/bdr/_240_/t0169f347f8991857f8.jpg";
public static final String image16="http://p1.so.qhimgs1.com/bdr/_240_/t016333a4d8144d0681.jpg";
public static final String image17="http://p0.so.qhimgs1.com/bdr/_240_/t0123f85ae6dba80770.jpg";
public static final String image18="http://p2.so.qhimgs1.com/bdr/_240_/t010d8bc3205ced32a2.jpg";
public static final String image19="http://p1.so.qhmsg.com/bdr/_240_/t014976fa8e0ae97556.jpg";
public static final String image20="http://p1.so.qhimgs1.com/bdr/_240_/t01a846efd527e8acc1.jpg";
}
显示图片适配器
public class RecyclerViewAdapter1 extends RecylerCommonAdapter<String> {
private Context mContext;
public RecyclerViewAdapter1(Context context, List<String> data) {
super(context, data, R.layout.item_image);
this.mContext = context;
}
@Override
public void convert(ViewHolder holder, String item, final int position) {
Log.e("TAG", item);
holder.setImagePath(R.id.image_view, new ImageLoader(item));
if (mItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mItemClickListener.setOnItemClickListener(position);
}
});
}
if (mItemLongClickListener != null)
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return mItemLongClickListener.setOnItemLongClickListener(position);
}
});
}
public class ImageLoader extends ViewHolder.HolderImageLoader {
public ImageLoader(String path) {
super(path);
}
@Override
public void imageLoader(ImageView imageView, String path) {
Glide.with(mContext)
.load(path)
.placeholder(R.mipmap.ic_launcher)//图片加载出来前,显示的图片
.error(R.mipmap.ic_launcher_round)//图片加载失败后,显示的图片
.into(imageView);
}
}
private ItemClickListener mItemClickListener;
private ItemLongClickListener mItemLongClickListener;
public void setItemClickListener(ItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
public void setItemLongClickListener(ItemLongClickListener mItemLongClickListener) {
this.mItemLongClickListener = mItemLongClickListener;
}
}
测试多布局显示
public class CommonAdapterActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private List<ChatData> mChatDatas;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base_user);
mChatDatas = new ArrayList<>();
for (int i = 1; i < 100; i++) {
if (i % 3 == 0) {
mChatDatas.add(new ChatData("自己的内容" + i, 1));
} else {
mChatDatas.add(new ChatData("朋友的内容" + i, 0));
}
}
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(new RecylerAdapter(this, mChatDatas));
}
private class RecylerAdapter extends RecylerCommonAdapter<ChatData> {
public RecylerAdapter(Context context, List<ChatData> data) {
super(context, data, new MuliteSupport<ChatData>() {
@Override
public int getLayoutId(ChatData item) {//Object网上的数据
if (item.isMe == 1) {
return R.layout.chat_list_me;
}
return R.layout.chat_list_fired;
}
});
}
@Override
public void convert(ViewHolder holder, ChatData item, int position) {
holder.setText(R.id.chat_list, item.chatContent);
}
}
private class ChatData {
private ChatData(String chatContent, int isMe) {
this.chatContent = chatContent;
this.isMe = isMe;
}
String chatContent;
int isMe;
}
}