diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/ItemClickActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/ItemClickActivity.java index 9c32eb0e0..7e688a4c1 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/ItemClickActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/ItemClickActivity.java @@ -43,7 +43,7 @@ protected void onCreate(Bundle savedInstanceState) { initAdapter(); adapter.setOnItemClickListener(new OnItemClickListener() { @Override - public void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) { + public void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) { Tips.show("onItemClick " + position); } }); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/multi/BinderUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/multi/BinderUseActivity.java index 0bad09b46..b7d23d9b7 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/multi/BinderUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/multi/BinderUseActivity.java @@ -152,7 +152,7 @@ public ItemImgTextViewBinding onCreateViewBinding(@NotNull LayoutInflater layout @Override public void convert(@NotNull BinderVBHolder holder, Video data) { - holder.getViewBinding().tv.setText(data.getName()); + holder.getViewBinding().tv.setText("(ViewBinding) " + data.getName()); } /** diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/multi/BinderAdapter.kt b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/multi/BinderAdapter.kt deleted file mode 100644 index 9a301ce7f..000000000 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/multi/BinderAdapter.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.chad.baserecyclerviewadapterhelper.adapter.multi - -import com.chad.library.adapter.base.BaseBinderAdapter - -class BinderAdapter:BaseBinderAdapter() { - - -} \ No newline at end of file diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java index 49c502a6e..dd0acfb84 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java @@ -9,12 +9,14 @@ import com.chad.baserecyclerviewadapterhelper.R; import com.chad.baserecyclerviewadapterhelper.adapter.node.tree.NodeTreeAdapter; import com.chad.baserecyclerviewadapterhelper.entity.node.tree.FirstNode; +import com.chad.baserecyclerviewadapterhelper.entity.node.tree.SecondNode; import com.chad.library.adapter.base.entity.node.BaseNode; import com.chad.library.adapter.base.provider.BaseNodeProvider; import com.chad.library.adapter.base.viewholder.BaseViewHolder; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; public class FirstProvider extends BaseNodeProvider { @@ -77,6 +79,8 @@ private void setArrowSpin(BaseViewHolder helper, BaseNode data, boolean isAnimat @Override public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) { // 这里使用payload进行增量刷新(避免整个item刷新导致的闪烁,不自然) - getAdapter().expandOrCollapse(position, true, true, NodeTreeAdapter.EXPAND_COLLAPSE_PAYLOAD); +// getAdapter().expandOrCollapse(position, true, true, NodeTreeAdapter.EXPAND_COLLAPSE_PAYLOAD); + getAdapter().nodeAddData(data,new SecondNode(new ArrayList<>(),"p:"+position)); + getAdapter().notifyDataSetChanged(); } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/SecondProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/SecondProvider.java index cf579457a..528489493 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/SecondProvider.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/SecondProvider.java @@ -36,11 +36,15 @@ public void convert(@NotNull BaseViewHolder helper, @NotNull BaseNode data) { @Override public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) { - SecondNode entity = (SecondNode) data; - if (entity.isExpanded()) { - getAdapter().collapse(position); - } else { - getAdapter().expandAndCollapseOther(position); - } +// SecondNode entity = (SecondNode) data; +// if (entity.isExpanded()) { +// getAdapter().collapse(position); +// } else { +// getAdapter().expandAndCollapseOther(position); +// } + +// BaseNode fNode = getAdapter().findParentNode(position); +// getAdapter().nodeRemoveData(); +// getAdapter().notifyItemRemoved(position); } } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseBinderAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseBinderAdapter.kt index 91317a663..153675d2a 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseBinderAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseBinderAdapter.kt @@ -13,6 +13,13 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder * 使用 Binder 来实现adapter,既可以实现单布局,也能实现多布局 * 数据实体类也不存继承问题 * + * 当有多种条目的时候,避免在convert()中做太多的业务逻辑,把逻辑放在对应的 BaseItemBinder 中。 + * 适用于以下情况: + * 1、实体类不方便扩展,此Adapter的数据类型可以是任意类型,默认情况下不需要实现 getItemType + * 2、item 类型较多,在convert()中管理起来复杂 + * + * ViewHolder 由 [BaseItemBinder] 实现,并且每个[BaseItemBinder]可以拥有自己类型的ViewHolder类型。 + * * 数据类型为Any */ open class BaseBinderAdapter(list: MutableList? = null) : BaseQuickAdapter(0, list) { @@ -79,9 +86,7 @@ open class BaseBinderAdapter(list: MutableList? = null) : BaseQuickAdapter< } override fun getDefItemViewType(position: Int): Int { - val type = mTypeMap[data[position].javaClass] - checkNotNull(type) { "getDefItemViewType: index: $position - type: ${data[position].javaClass} Not Find!" } - return type + return findViewType(data[position].javaClass) } override fun bindViewClickListener(viewHolder: BaseViewHolder, viewType: Int) { @@ -105,6 +110,12 @@ open class BaseBinderAdapter(list: MutableList? = null) : BaseQuickAdapter< return getItemBinderOrNull(holder.itemViewType)?.onFailedToRecycleView(holder) ?: false } + protected fun findViewType(clazz : Class<*>):Int { + val type = mTypeMap[clazz] + checkNotNull(type) { "findViewType: ViewType: $clazz Not Find!" } + return type + } + protected open fun bindClick(viewHolder: BaseViewHolder) { if (getOnItemClickListener() == null) { //如果没有设置点击监听,则回调给 itemProvider diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseProviderMultiAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseProviderMultiAdapter.kt index c1af63d59..42b986008 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseProviderMultiAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseProviderMultiAdapter.kt @@ -18,6 +18,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder * @param T data 数据类型 * @constructor */ +@Deprecated("please use Class BaseBinderAdapter") abstract class BaseProviderMultiAdapter(data: MutableList? = null) : BaseQuickAdapter(0, data) { diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt index 45291e234..40701c7b6 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt @@ -32,6 +32,7 @@ import java.lang.reflect.InvocationTargetException import java.lang.reflect.Modifier import java.lang.reflect.ParameterizedType import java.util.* +import kotlin.collections.ArrayList /** * 获取模块 @@ -1158,17 +1159,24 @@ abstract class BaseQuickAdapter * @param list Collection? */ open fun setList(list: Collection?) { - // 不是同一个引用才清空列表 if (list !== this.data) { this.data.clear() if (!list.isNullOrEmpty()) { this.data.addAll(list) } - mLoadMoreModule?.reset() - mLastPosition = -1 - notifyDataSetChanged() - mLoadMoreModule?.checkDisableLoadMoreIfNotFullPage() + } else { + if (!list.isNullOrEmpty()) { + val newList = ArrayList(list) + this.data.clear() + this.data.addAll(newList) + } else { + this.data.clear() + } } + mLoadMoreModule?.reset() + mLastPosition = -1 + notifyDataSetChanged() + mLoadMoreModule?.checkDisableLoadMoreIfNotFullPage() } /** diff --git a/library/src/main/java/com/chad/library/adapter/base/listener/OnItemClickListener.java b/library/src/main/java/com/chad/library/adapter/base/listener/OnItemClickListener.java index 9394647b6..946caad4a 100644 --- a/library/src/main/java/com/chad/library/adapter/base/listener/OnItemClickListener.java +++ b/library/src/main/java/com/chad/library/adapter/base/listener/OnItemClickListener.java @@ -22,5 +22,5 @@ public interface OnItemClickListener { * will be a view provided by the adapter) * @param position The position of the view in the adapter. */ - void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position); + void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position); }