) = differ.submitList(list)
+
+ /**
+ * Get the current List - any diffing to present this list has already been computed and
+ * dispatched via the ListUpdateCallback.
+ *
+ * If a null List, or no List has been submitted, an empty list will be returned.
+ *
+ * The returned list may not be mutated - mutations to content must be done through
+ * {@link #submitList(List)}.
+ *
+ * @return current List.
+ */
+ fun getList(): List = differ.currentList
+
+ fun getCollectionPosition(adapterPosition: Int) = adapterPosition - getHeadersCount()
+
+}
diff --git a/recyclerview-adapters/src/main/java/ru/touchin/roboswag/components/adapters/ItemAdapterDelegate.java b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/components/adapters/ItemAdapterDelegate.java
new file mode 100644
index 0000000..324bcf4
--- /dev/null
+++ b/recyclerview-adapters/src/main/java/ru/touchin/roboswag/components/adapters/ItemAdapterDelegate.java
@@ -0,0 +1,85 @@
+package ru.touchin.roboswag.components.adapters;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+
+import java.util.List;
+
+/**
+ * Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders.
+ * Such delegates are creating and binding ViewHolders for specific items.
+ * Default {@link #getItemViewType} is generating on construction of object.
+ *
+ * @param Type of {@link RecyclerView.ViewHolder} of delegate;
+ * @param Type of items to bind to {@link RecyclerView.ViewHolder}s.
+ */
+public abstract class ItemAdapterDelegate extends AdapterDelegate {
+
+ @Override
+ public boolean isForViewType(@NonNull final List