diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java index 09166ffe8..6a719ea8c 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java @@ -6,7 +6,6 @@ import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; import com.chad.library.adapter.base.BaseViewHolder; -import com.chad.library.adapter.base.annotation.ItemProviderTag; import com.chad.library.adapter.base.provider.BaseItemProvider; /** @@ -17,12 +16,18 @@ * @date 2018/3/30 11:39 */ -@ItemProviderTag( - viewType = DemoMultipleItemRvAdapter.TYPE_IMG, - layout = R.layout.item_image_view -) public class ImgItemProvider extends BaseItemProvider { + @Override + public int viewType() { + return DemoMultipleItemRvAdapter.TYPE_IMG; + } + + @Override + public int layout() { + return R.layout.item_image_view; + } + @Override public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) { if (position % 2 == 0) { diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java index b27e673b1..d5d87227e 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java @@ -6,7 +6,6 @@ import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; import com.chad.library.adapter.base.BaseViewHolder; -import com.chad.library.adapter.base.annotation.ItemProviderTag; import com.chad.library.adapter.base.provider.BaseItemProvider; /** @@ -15,13 +14,18 @@ * @description: Text Img ItemProvider * @date 2018/3/30 11:39 */ - -@ItemProviderTag( - viewType = DemoMultipleItemRvAdapter.TYPE_TEXT_IMG, - layout = R.layout.item_img_text_view -) public class TextImgItemProvider extends BaseItemProvider { + @Override + public int viewType() { + return DemoMultipleItemRvAdapter.TYPE_TEXT_IMG; + } + + @Override + public int layout() { + return R.layout.item_img_text_view; + } + @Override public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) { helper.setText(R.id.tv, data.content); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java index f6ec63841..86b1c7061 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java @@ -6,38 +6,27 @@ import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; import com.chad.library.adapter.base.BaseViewHolder; -import com.chad.library.adapter.base.annotation.ItemProviderTag; import com.chad.library.adapter.base.provider.BaseItemProvider; /** * https://github.com/chaychan + * * @author ChayChan * @description: Text ItemProvider * @date 2018/3/30 11:39 */ -@ItemProviderTag( - viewType = DemoMultipleItemRvAdapter.TYPE_TEXT, - layout = R.layout.item_text_view -) -public class TextItemProvider extends BaseItemProvider { - - /* - 使用注解返回对应的viewType和layout,或者重写getViewType()和getLayout() - Use annotations to return the corresponding viewType and layout, or override getViewType() and getLayout() - - @Override - public int getViewType() { - return DemoMultipleItemRvAdapter.TYPE_TEXT; - } - */ - - /* - @Override - public int getLayout() { - return R.layout.item_text_view; - } - */ +public class TextItemProvider extends BaseItemProvider { + + @Override + public int viewType() { + return DemoMultipleItemRvAdapter.TYPE_TEXT; + } + + @Override + public int layout() { + return R.layout.item_text_view; + } @Override public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) { diff --git a/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java b/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java index 1ac762c10..5fc69f54c 100644 --- a/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java @@ -4,7 +4,6 @@ import android.util.SparseArray; import android.view.View; -import com.chad.library.adapter.base.annotation.ItemProviderTag; import com.chad.library.adapter.base.provider.BaseItemProvider; import com.chad.library.adapter.base.util.MultiTypeDelegate; import com.chad.library.adapter.base.util.ProviderDelegate; @@ -47,19 +46,12 @@ protected int getItemType(T t) { registerItemProvider(); mItemProviders = mProviderDelegate.getItemProviders(); + for (int i = 0; i < mItemProviders.size(); i++) { int key = mItemProviders.keyAt(i); - BaseItemProvider provider = mItemProviders.get(key); provider.mData = mData; - - ItemProviderTag tag = provider.getClass().getAnnotation(ItemProviderTag.class); - if (tag == null){ - getMultiTypeDelegate().registerItemType(key, provider.getLayout()); - }else{ - getMultiTypeDelegate().registerItemType(key, tag.layout()); - } - + getMultiTypeDelegate().registerItemType(key, provider.layout()); } } diff --git a/library/src/main/java/com/chad/library/adapter/base/annotation/ItemProviderTag.java b/library/src/main/java/com/chad/library/adapter/base/annotation/ItemProviderTag.java index ad62625c4..ef96556e6 100644 --- a/library/src/main/java/com/chad/library/adapter/base/annotation/ItemProviderTag.java +++ b/library/src/main/java/com/chad/library/adapter/base/annotation/ItemProviderTag.java @@ -14,6 +14,7 @@ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) +@Deprecated public @interface ItemProviderTag { int viewType(); int layout(); diff --git a/library/src/main/java/com/chad/library/adapter/base/provider/BaseItemProvider.java b/library/src/main/java/com/chad/library/adapter/base/provider/BaseItemProvider.java index efe4e680d..50dbd985f 100644 --- a/library/src/main/java/com/chad/library/adapter/base/provider/BaseItemProvider.java +++ b/library/src/main/java/com/chad/library/adapter/base/provider/BaseItemProvider.java @@ -18,6 +18,14 @@ public abstract class BaseItemProvider { public Context mContext; public List mData; + //子类须重写该方法返回viewType + //Rewrite this method to return viewType + public abstract int viewType(); + + //子类须重写该方法返回layout + //Rewrite this method to return layout + public abstract int layout(); + public abstract void convert(V helper, T data, int position); //子类若想实现条目点击事件则重写该方法 @@ -27,16 +35,4 @@ public abstract class BaseItemProvider { //子类若想实现条目长按事件则重写该方法 //Subclasses override this method if you want to implement an item long press event public boolean onLongClick(V helper, T data, int position){return false;}; - - //如果没有使用注解返回layout则重写该方法 - //Rewrite this method if you did not use annotations to return layout - public int getLayout(){ - return 0; - } - - //如果没有使用注解返回viewType则重写该方法 - //Rewrite this method if you did not use annotations to return viewType - public int getViewType(){ - return 0; - } } diff --git a/library/src/main/java/com/chad/library/adapter/base/util/ItemProviderException.java b/library/src/main/java/com/chad/library/adapter/base/util/ItemProviderException.java new file mode 100644 index 000000000..e1335d67e --- /dev/null +++ b/library/src/main/java/com/chad/library/adapter/base/util/ItemProviderException.java @@ -0,0 +1,15 @@ +package com.chad.library.adapter.base.util; + +/** + * @author ChayChan + * @description: ItemProviderException + * @date 2018/4/12 9:10 + */ + +public class ItemProviderException extends NullPointerException { + + public ItemProviderException(String message) { + super(message); + } + +} diff --git a/library/src/main/java/com/chad/library/adapter/base/util/ProviderDelegate.java b/library/src/main/java/com/chad/library/adapter/base/util/ProviderDelegate.java index 5dd94d853..f920f2321 100644 --- a/library/src/main/java/com/chad/library/adapter/base/util/ProviderDelegate.java +++ b/library/src/main/java/com/chad/library/adapter/base/util/ProviderDelegate.java @@ -2,7 +2,6 @@ import android.util.SparseArray; -import com.chad.library.adapter.base.annotation.ItemProviderTag; import com.chad.library.adapter.base.provider.BaseItemProvider; /** @@ -16,14 +15,12 @@ public class ProviderDelegate { private SparseArray mItemProviders = new SparseArray<>(); public void registerProvider(BaseItemProvider provider){ - ItemProviderTag tag = provider.getClass().getAnnotation(ItemProviderTag.class); - int viewType; - if (tag == null){ - viewType = provider.getViewType(); - }else{ - viewType = tag.viewType(); + if (provider == null){ + throw new ItemProviderException("ItemProvider can not be null"); } + int viewType = provider.viewType(); + if (mItemProviders.get(viewType) == null){ mItemProviders.put(viewType,provider); }