Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…dapterHelper

# Conflicts:
#	app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java
#	app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java
#	app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java
#	library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java
#	library/src/main/java/com/chad/library/adapter/base/provider/BaseItemProvider.java
#	library/src/main/java/com/chad/library/adapter/base/util/ProviderDelegate.java
  • Loading branch information
AllenCoder committed Apr 12, 2018
2 parents 9b086ba + e1c2217 commit 10ce6ea
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 67 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,7 +16,7 @@
* @date 2018/3/30 11:39
*/

public class ImgItemProvider extends BaseItemProvider<NormalMultipleEntity, BaseViewHolder> {
public class ImgItemProvider extends BaseItemProvider<NormalMultipleEntity,BaseViewHolder> {

@Override
public int viewType() {
Expand All @@ -33,9 +32,19 @@ public int layout() {
public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) {
if (position % 2 == 0) {
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
} else {
}else{
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
}
helper.addOnClickListener(R.id.iv);
}

@Override
public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show();
return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.chad.baserecyclerviewadapterhelper.adapter.provider;

import android.widget.Toast;

import com.chad.baserecyclerviewadapterhelper.R;
import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter;
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
Expand All @@ -8,13 +10,11 @@

/**
* https://github.com/chaychan
*
* @author ChayChan
* @description: Text Img ItemProvider
* @date 2018/3/30 11:39
*/

public class TextImgItemProvider extends BaseItemProvider<NormalMultipleEntity, BaseViewHolder> {
public class TextImgItemProvider extends BaseItemProvider<NormalMultipleEntity,BaseViewHolder> {

@Override
public int viewType() {
Expand All @@ -31,10 +31,19 @@ public void convert(BaseViewHolder helper, NormalMultipleEntity data, int positi
helper.setText(R.id.tv, data.content);
if (position % 2 == 0) {
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
} else {
}else{
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
}
helper.addOnClickListener(R.id.tv);
}

@Override
public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show();
return true;
}
}
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 @@ -32,7 +31,16 @@ public int layout() {
@Override
public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) {
helper.setText(R.id.tv, data.content);
helper.addOnClickListener(R.id.tv);
}

@Override
public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show();
return true;
}
}
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 All @@ -13,14 +12,14 @@

/**
* https://github.com/chaychan
*
* @author ChayChan
* @description: When there are multiple entries, avoid too much business logic in convert(),Put the logic of each item in the corresponding ItemProvider
* @description:
* When there are multiple entries, avoid too much business logic in convert(),Put the logic of each item in the corresponding ItemProvider
* 当有多种条目的时候,避免在convert()中做太多的业务逻辑,把逻辑放在对应的ItemProvider中
* @date 2018/3/21 9:55
*/

public abstract class MultipleItemRvAdapter<T, V extends BaseViewHolder> extends BaseQuickAdapter<T, V> {
public abstract class MultipleItemRvAdapter<T,V extends BaseViewHolder> extends BaseQuickAdapter<T, V> {

private SparseArray<BaseItemProvider> mItemProviders;
protected ProviderDelegate mProviderDelegate;
Expand All @@ -47,6 +46,7 @@ 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);
Expand All @@ -63,8 +63,47 @@ protected int getItemType(T t) {
protected void convert(V helper, T item) {
int itemViewType = helper.getItemViewType();
BaseItemProvider provider = mItemProviders.get(itemViewType);

provider.mContext = helper.itemView.getContext();

int position = helper.getLayoutPosition() - getHeaderLayoutCount();
provider.convert(helper, item, position);

bindClick(helper, item, position, provider);
}

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;

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);
}
});
}

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);
}
});
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,31 @@

/**
* https://github.com/chaychan
*
* @author ChayChan
* @description: The base class of ItemProvider
* @date 2018/3/21 10:41
*/

public abstract class BaseItemProvider<T, V extends BaseViewHolder> {
public abstract class BaseItemProvider<T,V extends BaseViewHolder> {

public Context mContext;
public List<T> mData;

/**
*
* @return
*/
//子类须重写该方法返回viewType
//Rewrite this method to return viewType
public abstract int viewType();

/**
*
* @return
*/
//子类须重写该方法返回layout
//Rewrite this method to return layout
public abstract int layout();

public abstract void convert(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){};

//子类若想实现条目长按事件则重写该方法
//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 @@ -17,10 +16,11 @@ public class ProviderDelegate {

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

int viewType = provider.viewType();

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

0 comments on commit 10ce6ea

Please sign in to comment.