presenter) {
+ if (presenter == null) return (V) this;
+ mPresenterMap.put(presenter.getClass(), presenter);
+ //noinspection unchecked
+ presenter.bindView((V) this);
+ return (V) this;
+ }
+
+ public > P getPresenter(Class
presenterClass) {
+ if (presenterClass == null) {
+ throw new IllegalArgumentException("presenterClass is null!");
+ }
+ BasePresenter basePresenter = mPresenterMap.get(presenterClass);
+ if (basePresenter == null) {
+ throw new IllegalArgumentException("presenter of <" + presenterClass.getSimpleName() + "> is not added!");
+ }
+ //noinspection unchecked
+ return (P) basePresenter;
+ }
+
+ @CallSuper
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+ public void onDestroy() {
+ Log.i(TAG, "destroy view: " + getClass().getSimpleName());
+ removeLifecycle(this);
+ for (BasePresenter presenter : mPresenterMap.values()) {
+ if (presenter != null) {
+ presenter.onDestroy();
+ }
+ }
+ mPresenterMap.clear();
+ }
+
+ private void addLifecycle(LifecycleObserver observer) {
+ if (mLifecycle == null) {
+ Log.w(TAG, "addLifecycle: mLifecycle is null");
+ return;
+ }
+ mLifecycle.addObserver(observer);
+ }
+
+ private void removeLifecycle(LifecycleObserver observer) {
+ if (mLifecycle == null) {
+ Log.w(TAG, "removeLifecycle: mLifecycle is null");
+ return;
+ }
+ mLifecycle.removeObserver(observer);
+ }
+}
diff --git a/lib/base/src/main/java/com/blankj/base/rv/BaseItem.java b/lib/base/src/main/java/com/blankj/base/rv/BaseItem.java
new file mode 100644
index 0000000000..b0d6de04fa
--- /dev/null
+++ b/lib/base/src/main/java/com/blankj/base/rv/BaseItem.java
@@ -0,0 +1,169 @@
+package com.blankj.base.rv;
+
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ *
+ * author: Blankj
+ * blog : http://blankj.com
+ * time : 2019/03/16
+ * desc :
+ *
+ */
+public abstract class BaseItem {
+
+ private static final SparseIntArray LAYOUT_SPARSE_ARRAY = new SparseIntArray();
+ private static final SparseArray VIEW_SPARSE_ARRAY = new SparseArray<>();
+ public boolean isBindViewHolder = false;
+
+ static ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ int layoutByType = LAYOUT_SPARSE_ARRAY.get(viewType, -1);
+ if (layoutByType != -1) {
+ return new ItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(layoutByType, parent, false));
+ }
+ View viewByType = VIEW_SPARSE_ARRAY.get(viewType);
+ if (viewByType != null) {
+ return new ItemViewHolder(viewByType);
+ }
+ throw new RuntimeException("onCreateViewHolder: get holder from view type failed.");
+ }
+
+ public abstract void bind(@NonNull final ItemViewHolder holder, final int position);
+
+ public void partialUpdate(List