mirror of
https://github.com/melihaksoy/Android-Kotlin-Modulerized-CleanArchitecture.git
synced 2026-04-26 18:58:32 +02:00
Separated diffutil callback creation from adapter
This commit is contained in:
@@ -25,8 +25,4 @@ fun <T> Fragment.observe(data: LiveData<T>, block: (T) -> Unit) {
|
|||||||
inline fun <reified T : ViewModel> ViewModelProvider.Factory.createFor(
|
inline fun <reified T : ViewModel> ViewModelProvider.Factory.createFor(
|
||||||
fragment: Fragment,
|
fragment: Fragment,
|
||||||
crossinline block: T.() -> Unit = {}
|
crossinline block: T.() -> Unit = {}
|
||||||
): T {
|
): T = ViewModelProviders.of(fragment, this)[T::class.java].apply(block)
|
||||||
val viewModel = ViewModelProviders.of(fragment, this)[T::class.java]
|
|
||||||
viewModel.apply(block)
|
|
||||||
return viewModel
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.melih.core.extensions
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get [diff callback][DiffUtil.ItemCallback] for given type based on provided checker
|
||||||
|
*/
|
||||||
|
fun <T> getDiffCallbackForType(itemCheck: (oldItem: T, newItem: T) -> Boolean) = object : DiffUtil.ItemCallback<T>() {
|
||||||
|
override fun areItemsTheSame(oldItem: T, newItem: T): Boolean =
|
||||||
|
itemCheck(oldItem, newItem)
|
||||||
|
|
||||||
|
override fun areContentsTheSame(oldItem: T, newItem: T): Boolean =
|
||||||
|
itemCheck(oldItem, newItem)
|
||||||
|
}
|
||||||
@@ -2,21 +2,14 @@ package com.melih.list.ui.adapters
|
|||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import com.melih.core.base.recycler.BasePagingListAdapter
|
import com.melih.core.base.recycler.BasePagingListAdapter
|
||||||
import com.melih.core.base.recycler.BaseViewHolder
|
import com.melih.core.base.recycler.BaseViewHolder
|
||||||
|
import com.melih.core.extensions.getDiffCallbackForType
|
||||||
import com.melih.list.databinding.LaunchRowBinding
|
import com.melih.list.databinding.LaunchRowBinding
|
||||||
import com.melih.repository.entities.LaunchEntity
|
import com.melih.repository.entities.LaunchEntity
|
||||||
|
|
||||||
class LaunchesAdapter(itemClickListener: (LaunchEntity) -> Unit) : BasePagingListAdapter<LaunchEntity>(
|
class LaunchesAdapter(itemClickListener: (LaunchEntity) -> Unit) : BasePagingListAdapter<LaunchEntity>(
|
||||||
object : DiffUtil.ItemCallback<LaunchEntity>() {
|
getDiffCallbackForType { oldItem, newItem -> oldItem.id == newItem.id },
|
||||||
override fun areItemsTheSame(oldItem: LaunchEntity, newItem: LaunchEntity): Boolean =
|
|
||||||
oldItem.id == newItem.id
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: LaunchEntity, newItem: LaunchEntity): Boolean =
|
|
||||||
oldItem.name == newItem.name
|
|
||||||
|
|
||||||
},
|
|
||||||
itemClickListener
|
itemClickListener
|
||||||
) {
|
) {
|
||||||
override fun createViewHolder(
|
override fun createViewHolder(
|
||||||
|
|||||||
Reference in New Issue
Block a user