12. LIVEDATA>PAGEDLIST<の生成
val data : LiveData<PagedList<Repo>> =
LivePagedListBuilder(dataSourceFactory,DATABASE_PAGE_SIZE)
.setBoundaryCallback(boundaryCallback)
.build()
13. VIEWMODEL
class SearchRepositoriesViewModel(private val repository: GithubRepository) : ViewModel() {
private val queryLiveData = MutableLiveData<String>()
private val repoResult: LiveData<RepoSearchResult> = Transformations.map(queryLiveData) {
// LiveData<PagedList>の生成
repository.search(it)
}
val repos: LiveData<PagedList<Repo>> = Transformations.switchMap(repoResult) { it -> it.data }
fun searchRepo(queryString: String) {
queryLiveData.postValue(queryString)
}
fun lastQueryValue(): String? = queryLiveData.value
}
14. ADAPTER
class ReposAdapter : PagedListAdapter<Repo, RecyclerView.ViewHolder>(REPO_COMPARATOR) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return RepoViewHolder.create(parent)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val repoItem = getItem(position)
if (repoItem != null) {
(holder as RepoViewHolder).bind(repoItem)
}
}
companion object {
private val REPO_COMPARATOR = object : DiffUtil.ItemCallback<Repo>() {
override fun areItemsTheSame(oldItem: Repo, newItem: Repo): Boolean =
oldItem.fullName == newItem.fullName
override fun areContentsTheSame(oldItem: Repo, newItem: Repo): Boolean =
oldItem == newItem
}
}
}