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( 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
}

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.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(