Skip to content

Instantly share code, notes, and snippets.

@jonrysimbolon
Created September 5, 2023 14:09
Show Gist options
  • Save jonrysimbolon/a19d4191684021b8afb6604095e5085d to your computer and use it in GitHub Desktop.
Save jonrysimbolon/a19d4191684021b8afb6604095e5085d to your computer and use it in GitHub Desktop.
package com.jonrysimbolon.base.adapter
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.paging.LoadState
import androidx.paging.LoadStateAdapter
import androidx.recyclerview.widget.RecyclerView
import com.jonrysimbolon.base.databinding.ItemLoadingBinding
class FooterLoadingStateAdapter(private val retry: () -> Unit) :
LoadStateAdapter<FooterLoadingStateAdapter.BottomLoadingStateViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
loadState: LoadState
): BottomLoadingStateViewHolder {
val binding = ItemLoadingBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return BottomLoadingStateViewHolder(binding, retry)
}
override fun onBindViewHolder(holder: BottomLoadingStateViewHolder, loadState: LoadState) {
holder.bind(loadState)
}
class BottomLoadingStateViewHolder(private val binding: ItemLoadingBinding, retry: () -> Unit) :
RecyclerView.ViewHolder(binding.root) {
init {
binding.retryButton.setOnClickListener { retry.invoke() }
}
fun bind(loadState: LoadState) {
binding.apply {
if (loadState is LoadState.Error) {
errorMsg.text = loadState.error.localizedMessage
}
progressBar.isVisible = loadState is LoadState.Loading
retryButton.isVisible = loadState is LoadState.Error
errorMsg.isVisible = loadState is LoadState.Error
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment