Separated diffutil callback creation from adapter

This commit is contained in:
Melih Aksoy
2019-07-26 16:49:32 +02:00
parent 23d9ae6a62
commit 48c24abb29
3 changed files with 17 additions and 14 deletions

View File

@@ -25,8 +25,4 @@ fun <T> Fragment.observe(data: LiveData<T>, block: (T) -> Unit) {
inline fun <reified T : ViewModel> ViewModelProvider.Factory.createFor(
fragment: Fragment,
crossinline block: T.() -> Unit = {}
): T {
val viewModel = ViewModelProviders.of(fragment, this)[T::class.java]
viewModel.apply(block)
return viewModel
}
): T = ViewModelProviders.of(fragment, this)[T::class.java].apply(block)

View File

@@ -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)
}

View File

@@ -2,21 +2,14 @@ package com.melih.list.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import com.melih.core.base.recycler.BasePagingListAdapter
import com.melih.core.base.recycler.BaseViewHolder
import com.melih.core.extensions.getDiffCallbackForType
import com.melih.list.databinding.LaunchRowBinding
import com.melih.repository.entities.LaunchEntity
class LaunchesAdapter(itemClickListener: (LaunchEntity) -> Unit) : BasePagingListAdapter<LaunchEntity>(
object : DiffUtil.ItemCallback<LaunchEntity>() {
override fun areItemsTheSame(oldItem: LaunchEntity, newItem: LaunchEntity): Boolean =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: LaunchEntity, newItem: LaunchEntity): Boolean =
oldItem.name == newItem.name
},
getDiffCallbackForType { oldItem, newItem -> oldItem.id == newItem.id },
itemClickListener
) {
override fun createViewHolder(