Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

import com.github.zeng1990java.commonadapter.CommonRecyclerAdapter;
import com.github.zeng1990java.commonadapter.ViewBinder;
import com.github.zeng1990java.commonadapter.ViewHolder;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -34,10 +33,14 @@ protected void onCreate(Bundle savedInstanceState) {
// mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));

// 单布局使用
mRecyclerView.setAdapter(mCommonRecyclerAdapter = new CommonRecyclerAdapter<String>(this, R.layout.item_view, getDatas()) {
mRecyclerView.setAdapter(mCommonRecyclerAdapter = new CommonRecyclerAdapter<String>(this, getDatas()) {
@Override
public void bindData(ViewHolder holder, String data, int position) {
holder.viewBinder().setText(R.id.text, data + " position: "+position);
public void bindData(ViewBinder binder, String data) {
binder.setText(R.id.text, data + " position: "+binder.getPosition());
}
@Override
public int getItemLayoutResId(String data, int position) {
return R.layout.item_view;
}
});

Expand Down Expand Up @@ -75,16 +78,16 @@ public void onClick(View v) {
// 设置item点击事件
mCommonRecyclerAdapter.setOnItemClickListener(new CommonRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(ViewHolder holder, int position) {
public void onItemClick(ViewBinder binder) {
MultiTypeActivity.start(MainActivity.this);
}
});

// 设置item长按事件
mCommonRecyclerAdapter.setOnItemLongClickListener(new CommonRecyclerAdapter.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(ViewHolder holder, int position) {
mCommonRecyclerAdapter.set(position, "Item Long Click "+position);
public boolean onItemLongClick(ViewBinder binder) {
mCommonRecyclerAdapter.set(binder.getPosition(), "Item Long Click "+binder.getPosition());
return true;
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import android.widget.Toast;

import com.github.zeng1990java.commonadapter.CommonRecyclerAdapter;
import com.github.zeng1990java.commonadapter.ViewHolder;
import com.github.zeng1990java.commonadapter.ViewBinder;
import com.github.zeng1990java.commonadapter_sample.bean.News;
import com.github.zeng1990java.commonadapter_sample.consts.Consts;
import com.github.zeng1990java.commonadapter_sample.data.NewDataSource;
Expand Down Expand Up @@ -41,8 +41,8 @@ protected void onCreate(Bundle savedInstanceState) {

mNewsAdapter.setOnItemClickListener(new CommonRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(ViewHolder holder, int position) {
News news = mNewsAdapter.getItem(position);
public void onItemClick(ViewBinder binder) {
News news = mNewsAdapter.getItem(binder.getPosition());
Toast.makeText(MultiTypeActivity.this, news.getTitle(), Toast.LENGTH_SHORT).show();
}
});
Expand All @@ -53,7 +53,7 @@ public void onItemClick(ViewHolder holder, int position) {
private class NewsAdapter extends CommonRecyclerAdapter<News>{

public NewsAdapter(@NonNull Context context) {
super(context, 0);
super(context);
}

@Override
Expand All @@ -74,18 +74,18 @@ public int getItemLayoutResId(News data, int position) {
}

@Override
public void bindData(ViewHolder holder, News data, int position) {
public void bindData(ViewBinder binder, News data) {
switch (data.getNewsType()){
case News.TYPE_NONE_PICTURE:
holder.viewBinder().setText(R.id.item_none_picture_title, data.getTitle())
binder.setText(R.id.item_none_picture_title, data.getTitle())
.setText(R.id.item_none_picture_author,
String.format(Locale.CHINA, Consts.FORMAT_AUTHOR, data.getAuthor()))
.setText(R.id.item_none_picture_date,
Consts.DATE_FORMAT.format(new Date(data.getReleaseTime())))
.setText(R.id.item_none_picture_intro, data.getIntro());
break;
case News.TYPE_SINGLE_PICTURE:
holder.viewBinder().setText(R.id.item_single_picture_title, data.getTitle())
binder.setText(R.id.item_single_picture_title, data.getTitle())
.setText(R.id.item_single_picture_author,
String.format(Locale.CHINA, Consts.FORMAT_AUTHOR, data.getAuthor()))
.setText(R.id.item_single_picture_date,
Expand All @@ -94,7 +94,7 @@ public void bindData(ViewHolder holder, News data, int position) {
break;
case News.TYPE_MULTIPLE_PICTURE:
String[] urls = data.getCoverUrl().split(Consts.URL_SEPARATOR);
holder.viewBinder().setText(R.id.item_multiple_picture_intro, data.getIntro())
binder.setText(R.id.item_multiple_picture_intro, data.getIntro())
.setImageUrl(R.id.item_multiple_picture_cover_left,urls[0])
.setImageUrl(R.id.item_multiple_picture_cover_right, urls[1]);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,22 @@
public abstract class CommonRecyclerAdapter<T> extends RecyclerView.Adapter<ViewHolder> {

public interface OnItemClickListener{
void onItemClick(ViewHolder holder, int position);
void onItemClick(ViewBinder binder);
}

public interface OnItemLongClickListener{
boolean onItemLongClick(ViewHolder holder, int position);
boolean onItemLongClick(ViewBinder binder);
}

public interface OnLoadMoreListener{
void onLoadMore();
}

private static final int TYPE_HEADER = -1;
private static final int TYPE_FOOTER = -2;
private static final int TYPE_LOADMORE = -3;

private Context mContext;
private int mLayoutId;
private List<T> mDatas;
private LayoutInflater mInflater;

Expand Down Expand Up @@ -69,13 +72,12 @@ public void setLoadMoreLayoutId(int loadMoreLayoutId) {
mLoadMoreLayoutId = loadMoreLayoutId;
}

public CommonRecyclerAdapter(@NonNull Context context, int layoutId){
this(context, layoutId, new ArrayList<T>());
public CommonRecyclerAdapter(@NonNull Context context){
this(context, new ArrayList<T>());
}

public CommonRecyclerAdapter(@NonNull Context context, int layoutId, @NonNull List<T> datas){
public CommonRecyclerAdapter(@NonNull Context context, @NonNull List<T> datas){
mContext = context;
mLayoutId = layoutId;
mDatas = datas;
mInflater = LayoutInflater.from(mContext);
mLoadMoreLayoutId = AdapterConfig.getInstance().getLoadingLayoutId();
Expand Down Expand Up @@ -198,27 +200,36 @@ public int getSpanSize(int position) {
}
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == R.layout.adapter_view_header_layout){
return new ViewHolder(mHeaderLayout);
}

if (viewType == R.layout.adapter_view_footer_layout){
return new ViewHolder(mFooterLayout);
}
private int getRealPosition(int position) {
return position - getHeaderViewItemCount();
}

if (viewType == R.layout.adapter_view_load_layout){
View itemView = inflateItemView(parent, mLoadMoreLayoutId);
return new ViewHolder(itemView);
@Override
public final ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewHolder holder;
switch (viewType) {
case TYPE_HEADER:
holder = new ViewHolder(mHeaderLayout);
break;
case TYPE_FOOTER:
holder = new ViewHolder(mFooterLayout);
break;
case TYPE_LOADMORE:
View loadmoreView = inflateItemView(parent, mLoadMoreLayoutId);
holder = new ViewHolder(loadmoreView);
break;
default:
int layoutId = viewType;
View itemView = inflateItemView(parent, layoutId);
ViewBinder viewBinder = createViewBinder(itemView);
holder = new ViewHolder(viewBinder);
break;
}
View itemView = inflateItemView(parent, viewType);
ViewBinder viewBinder = createViewBinder(itemView);
return new ViewHolder(itemView, viewBinder);
return holder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
public final void onBindViewHolder(ViewHolder holder, int position) {
if (isHeader(position) || isFooter(position)){
return;
}
Expand All @@ -233,46 +244,47 @@ public void onBindViewHolder(final ViewHolder holder, int position) {
return;
}

final int dataPosition = position - getHeaderViewItemCount();
final int dataPosition = getRealPosition(position);
final ViewBinder binder = holder.viewBinder();
binder.setPosition(dataPosition);

holder.itemView.setOnClickListener(new View.OnClickListener() {
binder.getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null){
mOnItemClickListener.onItemClick(holder, dataPosition);
mOnItemClickListener.onItemClick(binder);
}
}
});

holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
binder.getView().setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mOnItemLongClickListener != null){
return mOnItemLongClickListener.onItemLongClick(holder, dataPosition);
}
return false;
return mOnItemLongClickListener != null
&& mOnItemLongClickListener.onItemLongClick(binder);
}
});

bindData(holder, getItem(dataPosition), dataPosition);
bindData(binder, getItem(dataPosition));
}

public abstract void bindData(ViewHolder holder, T data, int position);
public abstract void bindData(ViewBinder binder, T data);

@Override
public int getItemViewType(int position) {
public final int getItemViewType(int position) {
if (isHeader(position)){
return R.layout.adapter_view_header_layout;
return TYPE_HEADER;
}

if (isFooter(position)){
return R.layout.adapter_view_footer_layout;
return TYPE_FOOTER;
}

if (isLoadMore(position)){
return R.layout.adapter_view_load_layout;
return TYPE_LOADMORE;
}
int dataPosition = position - getHeaderViewItemCount();

int dataPosition = getRealPosition(position);
return getItemLayoutResId(getItem(dataPosition), dataPosition);
}

Expand All @@ -288,9 +300,7 @@ protected View inflateItemView(ViewGroup parent, int layoutId){
return mInflater.inflate(layoutId, parent, false);
}

public int getItemLayoutResId(T data, int position){
return mLayoutId;
}
public abstract int getItemLayoutResId(T data, int position);

public T getItem(int position){
return mDatas.get(position);
Expand Down Expand Up @@ -350,7 +360,6 @@ public void replaceAll(@NonNull List<T> datas){

// 遍历新列表,对旧列表数据进行更新,增加,删除
for (int indexNew = 0; indexNew < datas.size(); indexNew++) {

T item = datas.get(indexNew);
int indexOld = mDatas.indexOf(item);
if (indexOld == -1){
Expand Down Expand Up @@ -442,20 +451,14 @@ private int getLoadMoreViewItemCount(){
return hasLoadMoreView() ? 1 : 0;
}

private boolean hasHeaderView(){
if (mHeaderLayout == null){
return false;
}

return mHeaderLayout.getChildCount() > 0;
private boolean hasHeaderView() {
return mHeaderLayout != null
&& mHeaderLayout.getChildCount() > 0;
}

private boolean hasFooterView(){
if(mFooterLayout == null){
return false;
}

return mFooterLayout.getChildCount() > 0;
private boolean hasFooterView() {
return mFooterLayout != null
&& mFooterLayout.getChildCount() > 0;
}

private boolean hasLoadMoreView(){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public class ViewBinder {
private Context mContext;
private View mItemView;
private AdapterImageLoader mImageLoader;
private int mPosition;

private ViewBinder(Context context, View itemView){
this(context, itemView, AdapterConfig.getInstance().getImageLoader());
Expand Down Expand Up @@ -62,6 +63,14 @@ public static ViewBinder create(Context context, View itemView, AdapterImageLoad
return new ViewBinder(context, itemView, imageLoader);
}

public int getPosition() {
return mPosition;
}

void setPosition(int position) {
this.mPosition = position;
}

/**
* This method allows you to retrieve a view and perform custom
* operations on it, not covered by the BaseAdapterHelper.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
* @author zxb
* @date 16/7/16 下午11:31
*/
public class ViewHolder extends RecyclerView.ViewHolder {
class ViewHolder extends RecyclerView.ViewHolder {

private ViewBinder mViewBinder;

Expand All @@ -18,8 +18,8 @@ public ViewHolder(View itemView) {
mViewBinder = ViewBinder.create(itemView);
}

public ViewHolder(View itemView, ViewBinder viewBinder){
super(itemView);
public ViewHolder(ViewBinder viewBinder){
super(viewBinder.getView());
mViewBinder = viewBinder;
}

Expand Down