package com.moziqi.pullloadmorerecyclerview;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* RecyclerView的万能适配器,适配任何一个RecyclerView
*
* @author kymjs (http://www.kymjs.com/) on 8/27/15.
*/
public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerHolder> {
protected List<T> realDatas;
protected final int mItemLayoutId;
protected boolean isScrolling;
protected Context cxt;
private OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(View view, Object data, int position);
}
public BaseRecyclerAdapter(RecyclerView v, Collection<T> datas, int itemLayoutId) {
if (datas == null) {
realDatas = new ArrayList<>();
} else if (datas instanceof List) {
realDatas = (List<T>) datas;
} else {
realDatas = new ArrayList<>(datas);
}
mItemLayoutId = itemLayoutId;
cxt = v.getContext();
v.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
isScrolling = !(newState == RecyclerView.SCROLL_STATE_IDLE);
if (!isScrolling) {
notifyDataSetChanged();
}
}
});
}
/**
* Recycler适配器填充方法
*
* @param holder viewholder
* @param item javabean
* @param isScrolling RecyclerView是否正在滚动
*/
public abstract void convert(RecyclerHolder holder, T item, int position, boolean isScrolling);
@Override
public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(cxt);
View root = inflater.inflate(mItemLayoutId, parent, false);
return new RecyclerHolder(root);
}
@Override
public void onBindViewHolder(RecyclerHolder holder, int position) {
convert(holder, realDatas.get(position), position, isScrolling);
holder.itemView.setOnClickListener(getOnClickListener(position));
}
@Override
public int getItemCount() {
return realDatas.size();
}
public void setOnItemClickListener(OnItemClickListener l) {
listener = l;
}
public View.OnClickListener getOnClickListener(final int position) {
return new View.OnClickListener() {
@Override
public void onClick(@Nullable View v) {
if (listener != null && v != null) {
listener.onItemClick(v, realDatas.get(position), position);
}
}
};
}
public BaseRecyclerAdapter<T> refresh(Collection<T> datas) {
if (datas == null) {
realDatas = new ArrayList<>();
} else if (datas instanceof List) {
realDatas = (List<T>) datas;
} else {
realDatas = new ArrayList<>(datas);
}
return this;
}
public Collection<T> getDataList() {
return realDatas;
}
}
package com.moziqi.pullloadmorerecyclerview;
import android.graphics.Bitmap;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
/**
* 适配一切RecyclerView.ViewHolder
*
* @author moziqi on 8/27/15.
*/
public class RecyclerHolder extends RecyclerView.ViewHolder {
private final SparseArray<View> mViews;
public RecyclerHolder(View itemView) {
super(itemView);
//默认只有15,这里最好针对不同的item来重新设计一个
this.mViews = new SparseArray<View>(15);
}
public SparseArray<View> getAllView() {
return mViews;
}
/**
* 通过控件的Id获取对于的控件,如果没有则加入views
*
* @param viewId
* @return
*/
@SuppressWarnings("unchecked")
public <T extends View> T findViewById(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
/**
* 为TextView设置字符串
*
* @param viewId
* @param text
* @return
*/
public RecyclerHolder setText(int viewId, String text) {
TextView view = findViewById(viewId);
view.setText(text);
return this;
}
/**
* 为ImageView设置图片
*
* @param viewId
* @param drawableId
* @return
*/
public RecyclerHolder setImageResource(int viewId, int drawableId) {
ImageView view = findViewById(viewId);
view.setImageResource(drawableId);
return this;
}
/**
* 为ImageView设置图片
*
* @param viewId
* @param bm
* @return
*/
public RecyclerHolder setImageBitmap(int viewId, Bitmap bm) {
ImageView view = findViewById(viewId);
view.setImageBitmap(bm);
return this;
}
/**
* 为ImageView设置图片
*
* @param viewId
* @param uri
* @return
*/
public RecyclerHolder setImageByUrl(int viewId,String uri) {
//自己修改加载图片加载类
ImageView view = findViewById(viewId);
//ImageLoaderUtils.displayImage(uri, view);
return this;
}
}
转载请表明来之这里http://my.oschina.net/moziqi/blog/308842
觉得这篇文章帮助到你了,你可以请我吃个糖。哈哈