diff --git a/README-cn.md b/README-cn.md index 35a6784ea..29665fb8e 100644 --- a/README-cn.md +++ b/README-cn.md @@ -32,7 +32,7 @@ 然后在dependencies添加: ``` dependencies { - compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.5.8' + compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.6.2' } ``` diff --git a/README.md b/README.md index d98efde88..04a28462d 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Add it in your root build.gradle at the end of repositories: Add the dependency ``` dependencies { - compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.5.8' + compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.6.2' } ``` diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java index ddcf0efa0..d1296413f 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java @@ -63,7 +63,6 @@ public void onLoadMoreRequested() { mRecyclerView.post(new Runnable() { @Override public void run() { - // mQuickAdapter.isNextLoad(false); mQuickAdapter.notifyDataChangedAfterLoadMore(false); } }); @@ -74,7 +73,6 @@ public void run() { public void run() { DataServer.addData(mQuickAdapter.getData(), PAGE_SIZE); mCurrentCounter = mQuickAdapter.getItemCount(); - // mQuickAdapter.isNextLoad(true); mQuickAdapter.notifyDataChangedAfterLoadMore(true); } @@ -99,7 +97,6 @@ private void initAdapter() { mQuickAdapter.openLoadAnimation(); mRecyclerView.setAdapter(mQuickAdapter); mCurrentCounter = mQuickAdapter.getItemCount(); - // mQuickAdapter.setOnLoadMoreListener(PAGE_SIZE, this); mQuickAdapter.setOnLoadMoreListener(this); mQuickAdapter.openLoadMore(PAGE_SIZE,true);//or call mQuickAdapter.setPageSize(PAGE_SIZE); mQuickAdapter.openLoadMore(true); addHeadView(); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java index cb407175c..5dee92849 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java @@ -24,7 +24,7 @@ public MultipleItemQuickAdapter(Context context, List data) { protected void convert(BaseViewHolder helper, MultipleItem item) { switch (helper.getItemViewType()) { case MultipleItem.TEXT: - helper.setImageUrl(R.id.tv, item.getContent()); + helper.setText(R.id.tv, item.getContent()); break; case MultipleItem.IMG: helper.setImageUrl(R.id.iv, item.getContent()); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/animation/CustomAnimation.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/animation/CustomAnimation.java index ddd9a8085..82e94587c 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/animation/CustomAnimation.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/animation/CustomAnimation.java @@ -9,7 +9,7 @@ /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public class CustomAnimation extends BaseAnimation { +public class CustomAnimation implements BaseAnimation { @Override public Animator[] getAnimators(View view) { diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java index 008776e85..1287590a4 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java @@ -2,45 +2,42 @@ import android.content.Context; import android.util.SparseArray; -import android.view.LayoutInflater; -import android.view.View; import android.view.ViewGroup; import com.chad.library.adapter.base.entity.MultiItemEntity; -import java.util.ArrayList; import java.util.List; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public abstract class BaseMultiItemQuickAdapter extends BaseQuickAdapter { - protected List mData; + + /** + * layouts indexed with their types + */ private SparseArray layouts; /** * Same as QuickAdapter#QuickAdapter(Context,int) but with * some initialization data. + * * @param context The context. * @param data A new list is created out of this one to avoid mutable list */ public BaseMultiItemQuickAdapter(Context context, List data) { super(context, data); - this.mData = data == null ? new ArrayList() : new ArrayList(data); - this.mContext = context; } @Override protected int getDefItemViewType(int position) { - return mData.get(position).getItemType(); + return ((MultiItemEntity) mData.get(position)).getItemType(); } @Override protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { - int layoutId = getLayoutId(viewType); - View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); - return new BaseViewHolder(mContext, view); + return createBaseViewHolder(parent, getLayoutId(viewType)); } private int getLayoutId(int viewType) { @@ -54,6 +51,7 @@ protected void addItmeType(int type, int layoutResId) { layouts.put(type, layoutResId); } + @Override protected void convert(BaseViewHolder helper, Object item) { convert(helper, (T) item); diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index f23349d0a..65344db7f 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -37,6 +37,31 @@ public abstract class BaseQuickAdapter extends RecyclerView.Adapter mData; + protected static final int HEADER_VIEW = 0x00000111; + protected static final int LOADING_VIEW = 0x00000222; + protected static final int FOOTER_VIEW = 0x00000333; + protected static final int EMPTY_VIEW = 0x00000555; @IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT}) @Retention(RetentionPolicy.SOURCE) @@ -65,40 +90,6 @@ public abstract class BaseQuickAdapter extends RecyclerView.Adapter mData; - - private Interpolator mInterpolator = new LinearInterpolator(); - - private int mDuration = 300; - - private int mLastPosition = -1; - - - private OnRecyclerViewItemClickListener onRecyclerViewItemClickListener; - - private RequestLoadMoreListener mRequestLoadMoreListener; - - @AnimationType - private BaseAnimation mCustomAnimation; - private BaseAnimation mSelectAnimation = new AlphaInAnimation(); - protected static final int HEADER_VIEW = 0x00000111; - protected static final int LOADING_VIEW = 0x00000222; - protected static final int FOOTER_VIEW = 0x00000333; - protected static final int EMPTY_VIEW = 0x00000555; - private View mHeaderView; - private View mFooterView; - private int pageSize = -1; - /** - * View to show if there are no items to show. - */ - private View mEmptyView; - /** * call the method will not enable the loadMore funcation and the params pageSize is invalid * more infomation see{@link public void openLoadMore(int pageSize, boolean enable),@link public void setOnLoadMoreListener(RequestLoadMoreListener requestLoadMoreListener)} method @@ -198,6 +189,7 @@ public void onClick(View v) { public BaseQuickAdapter(Context context, int layoutResId, List data) { this.mData = data == null ? new ArrayList() : new ArrayList(data); this.mContext = context; + this.mLayoutInflater = LayoutInflater.from(context); if (layoutResId != 0) { this.mLayoutResId = layoutResId; } @@ -263,8 +255,6 @@ public T getItem(int position) { return mData.get(position); } - ; - public int getHeaderViewsCount() { return mHeaderView == null ? 0 : 1; } @@ -311,52 +301,55 @@ protected int getDefItemViewType(int position) { @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == 0) { - return onCreateDefViewHolder(parent, viewType); - } else if (viewType == LOADING_VIEW) { - return new FooterViewHolder(getItemView(R.layout.def_loading, parent)); - } else if (viewType == HEADER_VIEW) { - return new HeadViewHolder(mHeaderView); - } else if (viewType == FOOTER_VIEW) { - return new FooterViewHolder(mFooterView); - } else if (viewType == EMPTY_VIEW) { - return new EmptyViewHolder(mEmptyView); - } else { - return onCreateDefViewHolder(parent, viewType); + BaseViewHolder baseViewHolder = onCreateDefViewHolder(parent, viewType); + switch (viewType) { + case LOADING_VIEW: + baseViewHolder = createBaseViewHolder(parent, R.layout.def_loading); + break; + case HEADER_VIEW: + baseViewHolder = new BaseViewHolder(mContext, mHeaderView); + break; + case EMPTY_VIEW: + baseViewHolder = new BaseViewHolder(mContext, mEmptyView); + break; + case FOOTER_VIEW: + baseViewHolder = new BaseViewHolder(mContext, mFooterView); + break; } + return baseViewHolder; } - protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { - return new ContentViewHolder(getItemView(mLayoutResId, parent)); - } - - public static class FooterViewHolder extends BaseViewHolder { + @Override + public void onBindViewHolder(final RecyclerView.ViewHolder holder, int positions) { - public FooterViewHolder(View itemView) { - super(itemView.getContext(), itemView); + switch (holder.getItemViewType()) { + case 0: + convert((BaseViewHolder) holder, mData.get(holder.getLayoutPosition() - getHeaderViewsCount())); + initItemClickListener(holder, (BaseViewHolder) holder); + addAnimation(holder); + break; + case LOADING_VIEW: + addLoadMore(holder); + break; + case HEADER_VIEW: + case EMPTY_VIEW: + case FOOTER_VIEW: + break; + default: + convert((BaseViewHolder) holder, mData.get(holder.getLayoutPosition() - getHeaderViewsCount())); + onBindDefViewHolder((BaseViewHolder) holder, mData.get(holder.getLayoutPosition() - getHeaderViewsCount())); + break; } - } - public static class HeadViewHolder extends BaseViewHolder { - - public HeadViewHolder(View itemView) { - super(itemView.getContext(), itemView); - } } - public static class ContentViewHolder extends BaseViewHolder { - - public ContentViewHolder(View itemView) { - super(itemView.getContext(), itemView); - } + protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { + return createBaseViewHolder(parent, mLayoutResId); } - public static class EmptyViewHolder extends BaseViewHolder { - - public EmptyViewHolder(View itemView) { - super(itemView.getContext(), itemView); - } + protected BaseViewHolder createBaseViewHolder(ViewGroup parent, int layoutResId) { + return new BaseViewHolder(mContext, getItemView(layoutResId, parent)); } @@ -416,54 +409,43 @@ public void notifyDataChangedAfterLoadMore(boolean isNextLoad) { } - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { - - if (holder instanceof ContentViewHolder) { - int index = position - getHeaderViewsCount(); - BaseViewHolder baseViewHolder = (BaseViewHolder) holder; - convert(baseViewHolder, mData.get(index)); - if (onRecyclerViewItemClickListener != null) { - baseViewHolder.convertView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onRecyclerViewItemClickListener.onItemClick(v, position - getHeaderViewsCount()); - } - }); + private void addLoadMore(RecyclerView.ViewHolder holder) { + if (isLoadMore()) { + mLoadingMoreEnable = true; + mRequestLoadMoreListener.onLoadMoreRequested(); + if (holder.itemView.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { + StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams(); + params.setFullSpan(true); } - if (mOpenAnimationEnable) { - if (!mFirstOnlyEnable || position > mLastPosition) { - BaseAnimation animation = null; - if (mCustomAnimation != null) { - animation = mCustomAnimation; - } else { - animation = mSelectAnimation; - } - for (Animator anim : animation.getAnimators(holder.itemView)) { - anim.setDuration(mDuration).start(); - anim.setInterpolator(mInterpolator); - } - mLastPosition = position; + } + } + + private void initItemClickListener(final RecyclerView.ViewHolder holder, BaseViewHolder baseViewHolder) { + if (onRecyclerViewItemClickListener != null) { + baseViewHolder.convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onRecyclerViewItemClickListener.onItemClick(v, holder.getLayoutPosition() - getHeaderViewsCount()); } - } - } else if (holder instanceof FooterViewHolder) { - if (isLoadMore()) { - mLoadingMoreEnable = true; - mRequestLoadMoreListener.onLoadMoreRequested(); - if (holder.itemView.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams(); - params.setFullSpan(true); + }); + } + } + + private void addAnimation(RecyclerView.ViewHolder holder) { + if (mOpenAnimationEnable) { + if (!mFirstOnlyEnable || holder.getLayoutPosition() > mLastPosition) { + BaseAnimation animation = null; + if (mCustomAnimation != null) { + animation = mCustomAnimation; + } else { + animation = mSelectAnimation; } + for (Animator anim : animation.getAnimators(holder.itemView)) { + anim.setDuration(mDuration).start(); + anim.setInterpolator(mInterpolator); + } + mLastPosition = holder.getLayoutPosition(); } - - } else if (holder instanceof HeadViewHolder) { - - } else if (holder instanceof EmptyViewHolder) { - - } else { - int index = position - getHeaderViewsCount(); - BaseViewHolder baseViewHolder = (BaseViewHolder) holder; - onBindDefViewHolder(baseViewHolder, mData.get(index)); } } @@ -472,8 +454,7 @@ private boolean isLoadMore() { } protected View getItemView(int layoutResId, ViewGroup parent) { - return LayoutInflater.from(parent.getContext()).inflate( - layoutResId, parent, false); + return mLayoutInflater.inflate(layoutResId, parent, false); } @@ -483,6 +464,7 @@ protected View getItemView(int layoutResId, ViewGroup parent) { * @param holder * @param item */ + @Deprecated protected void onBindDefViewHolder(BaseViewHolder holder, T item) { } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseSectionQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseSectionQuickAdapter.java index 474247a37..c73934204 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseSectionQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseSectionQuickAdapter.java @@ -2,12 +2,10 @@ import android.content.Context; import android.support.v7.widget.StaggeredGridLayoutManager; -import android.view.View; import android.view.ViewGroup; import com.chad.library.adapter.base.entity.SectionEntity; -import java.util.ArrayList; import java.util.List; /** @@ -17,7 +15,6 @@ public abstract class BaseSectionQuickAdapter extends B protected int mSectionHeadResId; - protected List mData; protected static final int SECTION_HEADER_VIEW = 0x00000444; /** @@ -31,49 +28,42 @@ public abstract class BaseSectionQuickAdapter extends B */ public BaseSectionQuickAdapter(Context context, int layoutResId, int sectionHeadResId, List data) { super(context, layoutResId, data); - this.mData = data == null ? new ArrayList() : new ArrayList(data); - this.mContext = context; - this.mLayoutResId = layoutResId; this.mSectionHeadResId = sectionHeadResId; } @Override protected int getDefItemViewType(int position) { - return mData.get(position).isHeader ? SECTION_HEADER_VIEW : 0; + return ((SectionEntity) mData.get(position)).isHeader ? SECTION_HEADER_VIEW : 0; } @Override protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { if (viewType == SECTION_HEADER_VIEW) - return new SectionHeadViewHolder(getItemView(mSectionHeadResId,parent)); + return new BaseViewHolder(mContext, getItemView(mSectionHeadResId, parent)); return super.onCreateDefViewHolder(parent, viewType); - - } - - public static class SectionHeadViewHolder extends BaseViewHolder { - - public SectionHeadViewHolder(View itemView) { - super(itemView.getContext(), itemView); - } } + /** + * @param holder A fully initialized helper. + * @param item The item that needs to be displayed. + */ @Override - protected void onBindDefViewHolder(BaseViewHolder holder, Object item) { - if (holder instanceof SectionHeadViewHolder) { - convertHead(holder, (T) item); - if (holder.itemView.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams(); - params.setFullSpan(true); - } + protected void convert(BaseViewHolder holder, Object item) { + switch (holder.getItemViewType()) { + case SECTION_HEADER_VIEW: + if (holder.itemView.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { + StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams(); + params.setFullSpan(true); + } + convertHead(holder, (T) item); + break; + default: + convert(holder, (T) item); + break; } } - @Override - protected void convert(BaseViewHolder helper, Object item) { - convert(helper, (T) item); - } - protected abstract void convertHead(BaseViewHolder helper, T item); protected abstract void convert(BaseViewHolder helper, T item); diff --git a/library/src/main/java/com/chad/library/adapter/base/animation/AlphaInAnimation.java b/library/src/main/java/com/chad/library/adapter/base/animation/AlphaInAnimation.java index 4cb51b3bd..1191f55e6 100755 --- a/library/src/main/java/com/chad/library/adapter/base/animation/AlphaInAnimation.java +++ b/library/src/main/java/com/chad/library/adapter/base/animation/AlphaInAnimation.java @@ -8,7 +8,7 @@ /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public class AlphaInAnimation extends BaseAnimation { +public class AlphaInAnimation implements BaseAnimation { private static final float DEFAULT_ALPHA_FROM = 0f; private final float mFrom; diff --git a/library/src/main/java/com/chad/library/adapter/base/animation/BaseAnimation.java b/library/src/main/java/com/chad/library/adapter/base/animation/BaseAnimation.java index ab4242707..5d0444f21 100644 --- a/library/src/main/java/com/chad/library/adapter/base/animation/BaseAnimation.java +++ b/library/src/main/java/com/chad/library/adapter/base/animation/BaseAnimation.java @@ -1,17 +1,13 @@ package com.chad.library.adapter.base.animation; import android.animation.Animator; -import android.support.v7.widget.RecyclerView; import android.view.View; -import android.view.ViewGroup; -import android.view.animation.Interpolator; -import android.view.animation.LinearInterpolator; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public abstract class BaseAnimation { +public interface BaseAnimation { - public abstract Animator[] getAnimators(View view); + Animator[] getAnimators(View view); } diff --git a/library/src/main/java/com/chad/library/adapter/base/animation/ScaleInAnimation.java b/library/src/main/java/com/chad/library/adapter/base/animation/ScaleInAnimation.java index bcd129929..f3286d790 100755 --- a/library/src/main/java/com/chad/library/adapter/base/animation/ScaleInAnimation.java +++ b/library/src/main/java/com/chad/library/adapter/base/animation/ScaleInAnimation.java @@ -8,7 +8,7 @@ /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public class ScaleInAnimation extends BaseAnimation { +public class ScaleInAnimation implements BaseAnimation { private static final float DEFAULT_SCALE_FROM = .5f; private final float mFrom; diff --git a/library/src/main/java/com/chad/library/adapter/base/animation/SlideInBottomAnimation.java b/library/src/main/java/com/chad/library/adapter/base/animation/SlideInBottomAnimation.java index 90b19ebf9..7299e7863 100755 --- a/library/src/main/java/com/chad/library/adapter/base/animation/SlideInBottomAnimation.java +++ b/library/src/main/java/com/chad/library/adapter/base/animation/SlideInBottomAnimation.java @@ -2,14 +2,13 @@ import android.animation.Animator; import android.animation.ObjectAnimator; -import android.support.v7.widget.RecyclerView; import android.view.View; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public class SlideInBottomAnimation extends BaseAnimation { +public class SlideInBottomAnimation implements BaseAnimation { diff --git a/library/src/main/java/com/chad/library/adapter/base/animation/SlideInLeftAnimation.java b/library/src/main/java/com/chad/library/adapter/base/animation/SlideInLeftAnimation.java index 742212322..af0b4051c 100755 --- a/library/src/main/java/com/chad/library/adapter/base/animation/SlideInLeftAnimation.java +++ b/library/src/main/java/com/chad/library/adapter/base/animation/SlideInLeftAnimation.java @@ -2,14 +2,13 @@ import android.animation.Animator; import android.animation.ObjectAnimator; -import android.support.v7.widget.RecyclerView; import android.view.View; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public class SlideInLeftAnimation extends BaseAnimation { +public class SlideInLeftAnimation implements BaseAnimation { @Override diff --git a/library/src/main/java/com/chad/library/adapter/base/animation/SlideInRightAnimation.java b/library/src/main/java/com/chad/library/adapter/base/animation/SlideInRightAnimation.java index a3eb834ed..5c1f01ded 100755 --- a/library/src/main/java/com/chad/library/adapter/base/animation/SlideInRightAnimation.java +++ b/library/src/main/java/com/chad/library/adapter/base/animation/SlideInRightAnimation.java @@ -2,14 +2,13 @@ import android.animation.Animator; import android.animation.ObjectAnimator; -import android.support.v7.widget.RecyclerView; import android.view.View; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ -public class SlideInRightAnimation extends BaseAnimation { +public class SlideInRightAnimation implements BaseAnimation { @Override diff --git a/library/src/main/java/com/chad/library/adapter/base/entity/MultiItemEntity.java b/library/src/main/java/com/chad/library/adapter/base/entity/MultiItemEntity.java index 5a9f988ee..508e5c297 100644 --- a/library/src/main/java/com/chad/library/adapter/base/entity/MultiItemEntity.java +++ b/library/src/main/java/com/chad/library/adapter/base/entity/MultiItemEntity.java @@ -1,10 +1,7 @@ package com.chad.library.adapter.base.entity; /** - * 项目名称:base-adapter-helper-recyclerview-master - * 类描述: - * 创建人:Chad - * 创建时间:16/4/22 上午11:04 + * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public abstract class MultiItemEntity { protected int itemType;