def paging_version = "3.0.0-alpha03"
implementation "androidx.paging:paging-runtime:$paging_version"
def lifecycle_version = "2.2.0"
implementation 'com.amitshekhar.android:android-networking:1.0.2'
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dataBinding {
enabled = true
}
import android.database.DatabaseUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.nas.mypaging.R
import com.nas.mypaging.paging.MyAdapter
/**
* 公司:江苏再出发网络科技有限公司
* 作者:Android 倪震宇
* 创建时间:2020/12/31
* 功能描述:
*/
abstract class BasePagingAdapterV3<T : Any, B : ViewDataBinding>(var diffCallback: DiffUtil.ItemCallback<T>) :
PagingDataAdapter<T, BasePagingAdapterV3.BaseViewHolder<B>>(diffCallback) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<B> {
val view =
LayoutInflater.from(parent.context).inflate(getItemLayout(), parent, false)
return BaseViewHolder(view)
}
abstract fun getItemLayout(): Int
class BaseViewHolder<B : ViewDataBinding>(itemView: View) :
RecyclerView.ViewHolder(itemView) {
val mBinding by lazy { DataBindingUtil.bind<B>(itemView) }
}
}
import android.util.Log
import androidx.paging.PagingSource
import com.nas.mypaging.paging.DataModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
/**
* 公司:江苏再出发网络科技有限公司
* 作者:Android 倪震宇
* 创建时间:2020/12/31
* 功能描述:
*/
abstract class BasePagingDataSourceV3<T : Any> : PagingSource<Int, T>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, T> {
val page = if (params.key == null) {
0
} else {
params.key
}
val data = dataEngin(page!!)
return LoadResult.Page(
data = data,
prevKey = null,
nextKey = if (data.size == 0) null else page + 1
)
}
abstract suspend fun getData(page: Int): List<T>
private suspend fun dataEngin(page: Int): List<T> {
return withContext(Dispatchers.IO) {
getData(page)
}
}
}