Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion recyclerview-adapters/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<manifest
package="ru.touchin.adapters"/>
package="ru.touchin.roboswag.recyclerview_adapters"/>

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov)
* Copyright (c) 2019 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov)
*
* This file is part of RoboSwag library.
*
Expand All @@ -17,33 +17,26 @@
*
*/

package ru.touchin.adapters;
package ru.touchin.roboswag.recyclerview_adapters

import androidx.annotation.NonNull;
import androidx.core.view.ViewCompat;
import androidx.recyclerview.widget.RecyclerView;
import android.view.ViewGroup;

import java.util.List;
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup

/**
* Objects of such class controls creation and binding of specific type of RecyclerView's ViewHolders.
* Default {@link #getItemViewType} is generating on construction of object.
* Default [.getItemViewType] is generating on construction of object.
*
* @param <TViewHolder> Type of {@link RecyclerView.ViewHolder} of delegate.
*/
public abstract class AdapterDelegate<TViewHolder extends RecyclerView.ViewHolder> {

private final int defaultItemViewType = ViewCompat.generateViewId();
* @param <TViewHolder> Type of [RecyclerView.ViewHolder] of delegate.
</TViewHolder> */
abstract class AdapterDelegate<TViewHolder : RecyclerView.ViewHolder> {

/**
* Unique ID of AdapterDelegate.
*
* @return Unique ID.
*/
public int getItemViewType() {
return defaultItemViewType;
}
val itemViewType = ViewCompat.generateViewId()

/**
* Returns if object is processable by this delegate.
Expand All @@ -53,7 +46,7 @@ public int getItemViewType() {
* @param collectionPosition Position of item in collection;
* @return True if item is processable by this delegate.
*/
public abstract boolean isForViewType(@NonNull final List<Object> items, final int adapterPosition, final int collectionPosition);
abstract fun isForViewType(items: List<*>, adapterPosition: Int, collectionPosition: Int): Boolean

/**
* Returns unique ID of item to support stable ID's logic of RecyclerView's adapter.
Expand All @@ -63,18 +56,15 @@ public int getItemViewType() {
* @param collectionPosition Position of item in collection;
* @return Unique item ID.
*/
public long getItemId(@NonNull final List<Object> items, final int adapterPosition, final int collectionPosition) {
return 0;
}
open fun getItemId(items: List<*>, adapterPosition: Int, collectionPosition: Int): Long = 0

/**
* Creates ViewHolder to bind item to it later.
*
* @param parent Container of ViewHolder's view.
* @return New ViewHolder.
*/
@NonNull
public abstract TViewHolder onCreateViewHolder(@NonNull final ViewGroup parent);
abstract fun onCreateViewHolder(parent: ViewGroup): TViewHolder

/**
* Binds item to created by this object ViewHolder.
Expand All @@ -85,12 +75,12 @@ public long getItemId(@NonNull final List<Object> items, final int adapterPositi
* @param collectionPosition Position of item in collection that contains item;
* @param payloads Payloads;
*/
public abstract void onBindViewHolder(
@NonNull final RecyclerView.ViewHolder holder,
@NonNull final List<Object> items,
final int adapterPosition,
final int collectionPosition,
@NonNull final List<Object> payloads
);
abstract fun onBindViewHolder(
holder: RecyclerView.ViewHolder,
items: List<*>,
adapterPosition: Int,
collectionPosition: Int,
payloads: List<*>
)

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.touchin.adapters
package ru.touchin.roboswag.recyclerview_adapters

import androidx.recyclerview.widget.RecyclerView
import android.util.SparseArray
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.touchin.adapters
package ru.touchin.roboswag.recyclerview_adapters

import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.AsyncListDiffer
Expand Down Expand Up @@ -33,7 +33,7 @@ open class DelegationListAdapter<TItem>(config: AsyncDifferConfig<TItem>) : Recy

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int, payloads: List<Any>) {
val collectionPosition = getCollectionPosition(position)
if (collectionPosition in 0 until getList().size) {
if (collectionPosition in getList().indices) {
if (itemClickListener != null) {
holder.itemView.setOnRippleClickListener {
itemClickListener?.invoke(getList()[getCollectionPosition(holder.adapterPosition)], holder)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package ru.touchin.roboswag.recyclerview_adapters

import androidx.recyclerview.widget.RecyclerView

/**
* 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 [.getItemViewType] is generating on construction of object.
*
* @param <TViewHolder> Type of [RecyclerView.ViewHolder] of delegate;
* @param <TItem> Type of items to bind to [RecyclerView.ViewHolder]s.
</TItem></TViewHolder> */
abstract class ItemAdapterDelegate<TViewHolder : RecyclerView.ViewHolder, TItem> : AdapterDelegate<TViewHolder>() {

override fun isForViewType(items: List<*>, adapterPosition: Int, collectionPosition: Int): Boolean {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

without return

return (collectionPosition >= 0
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Скобки лишние

&& collectionPosition < items.size
&& isForViewType(items[collectionPosition]!!, adapterPosition, collectionPosition))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

force unwrap

}

/**
* Returns if object is processable by this delegate.
* This item will be casted to [TItem] and passes to [.onBindViewHolder].
*
* @param item Item to check;
* @param adapterPosition Position of item in adapter;
* @param collectionPosition Position of item in collection that contains item;
* @return True if item is processable by this delegate.
*/
open fun isForViewType(item: Any, adapterPosition: Int, collectionPosition: Int): Boolean {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

without return

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Везде

return true
}

override fun getItemId(items: List<*>, adapterPosition: Int, collectionPosition: Int): Long =
getItemId(items[collectionPosition] as TItem, adapterPosition, collectionPosition)

/**
* Returns unique ID of item to support stable ID's logic of RecyclerView's adapter.
*
* @param item Item in adapter;
* @param adapterPosition Position of item in adapter;
* @param collectionPosition Position of item in collection that contains item;
* @return Unique item ID.
*/
fun getItemId(item: TItem, adapterPosition: Int, collectionPosition: Int): Long = 0

override fun onBindViewHolder(
holder: RecyclerView.ViewHolder,
items: List<*>,
adapterPosition: Int,
collectionPosition: Int,
payloads: List<*>
) {
onBindViewHolder(holder as TViewHolder, items[collectionPosition] as TItem, adapterPosition, collectionPosition, payloads)
}

/**
* Binds item with payloads to created by this object ViewHolder.
*
* @param holder ViewHolder to bind item to;
* @param item Item in adapter;
* @param adapterPosition Position of item in adapter;
* @param collectionPosition Position of item in collection that contains item;
* @param payloads Payloads;
*/
abstract fun onBindViewHolder(
holder: TViewHolder,
item: TItem,
adapterPosition: Int,
collectionPosition: Int,
payloads: List<*>
)

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.touchin.adapters
package ru.touchin.roboswag.recyclerview_adapters

import androidx.recyclerview.widget.ListUpdateCallback
import androidx.recyclerview.widget.RecyclerView
Expand Down
Loading