Skip to content

Commit

Permalink
Merge pull request #2140 from chaychan/master
Browse files Browse the repository at this point in the history
1.Deprecated interface ItemProvideTag; 
2.Replace reflections with native method;
3. Improve item click event handling
  • Loading branch information
AllenCoder authored Apr 12, 2018
2 parents 7fa4b85 + 66ca0bd commit e1c2217
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -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<NormalMultipleEntity,BaseViewHolder> {

@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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -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<NormalMultipleEntity,BaseViewHolder> {

@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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +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<NormalMultipleEntity,BaseViewHolder> {
public class TextItemProvider extends BaseItemProvider<NormalMultipleEntity, BaseViewHolder> {

@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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -47,14 +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);
getMultiTypeDelegate().registerItemType(key, tag.layout());
getMultiTypeDelegate().registerItemType(key, provider.layout());
}
}

Expand All @@ -76,20 +73,37 @@ protected void convert(V helper, T item) {
}

private void bindClick(final V helper, final T item, final int position, final BaseItemProvider provider) {
OnItemClickListener clickListener = getOnItemClickListener();
OnItemLongClickListener longClickListener = getOnItemLongClickListener();

if (clickListener != null && longClickListener != null){
//如果已经设置了子条目点击监听和子条目长按监听
// If you have set up a sub-entry click monitor and sub-entries long press listen
return;
}

View itemView = helper.itemView;

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
provider.onClick(helper, item, position);
}
});
if (clickListener == null){
//如果没有设置点击监听,则回调给itemProvider
//Callback to itemProvider if no click listener is set
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
provider.onClick(helper, item, position);
}
});
}

itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return provider.onLongClick(helper, item, position);
}
});
if (longClickListener == null){
//如果没有设置长按监听,则回调给itemProvider
// If you do not set a long press listener, callback to the itemProvider
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return provider.onLongClick(helper, item, position);
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Deprecated
public @interface ItemProviderTag {
int viewType();
int layout();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,21 @@ public abstract class BaseItemProvider<T,V extends BaseViewHolder> {
public Context mContext;
public List<T> 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);

public abstract void onClick(V helper, T data, int position);
//子类若想实现条目点击事件则重写该方法
//Subclasses override this method if you want to implement an item click event
public void onClick(V helper, T data, int position){};

public abstract boolean onLongClick(V helper, T data, int position);
//子类若想实现条目长按事件则重写该方法
//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;};
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import android.util.SparseArray;

import com.chad.library.adapter.base.annotation.ItemProviderTag;
import com.chad.library.adapter.base.provider.BaseItemProvider;

/**
Expand All @@ -16,12 +15,12 @@ public class ProviderDelegate {
private SparseArray<BaseItemProvider> mItemProviders = new SparseArray<>();

public void registerProvider(BaseItemProvider provider){
ItemProviderTag tag = provider.getClass().getAnnotation(ItemProviderTag.class);
if (tag == null){
throw new ItemProviderAnnotationException("ItemProviderTag not def layout");
if (provider == null){
throw new ItemProviderException("ItemProvider can not be null");
}

int viewType = tag.viewType();
int viewType = provider.viewType();

if (mItemProviders.get(viewType) == null){
mItemProviders.put(viewType,provider);
}
Expand Down

0 comments on commit e1c2217

Please sign in to comment.