Advertisement
bngoding

Untitled

Sep 22nd, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. class MyPagedListAdapter: PagedListAdapter<Model, RecyclerView.ViewHolder>(DIFF_CALLBACK) {
  2.  
  3. companion object {
  4. private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Model>() {
  5. override fun areItemsTheSame(oldItem: Model, newItem: Model): Boolean {
  6. return oldItem.id == newItem.id
  7. }
  8.  
  9. override fun areContentsTheSame(oldItem: Model, newItem: Model): Boolean {
  10. return oldItem == newItem
  11. }
  12. }
  13.  
  14. const val TYPE_PROGRESS = R.layout.layout_home_loading
  15. const val TYPE_ITEM = ViewHolder.layoutRes
  16. }
  17.  
  18. lateinit var listener:ListListener
  19. var NetworkState: NetworkState? = null
  20. set(value) {
  21. if (value == NetworkState.LOADING) {
  22. notifyDataSetChanged()
  23. notifyItemInserted(itemCount - 1)
  24. } else if (field == NetworkState.LOADING) {
  25. notifyDataSetChanged()
  26. notifyItemRemoved(itemCount - 1)
  27. }
  28. field = value
  29. }
  30.  
  31. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
  32. val inflater = LayoutInflater.from(parent.context)
  33. val view = inflater.inflate(viewType, parent, false)
  34. return when (viewType) {
  35. TYPE_PROGRESS -> LoadingViewHolder(view)
  36. else -> ViewHolder(view)
  37. }
  38. }
  39.  
  40. override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
  41. when (holder) {
  42. is ViewHolder -> {
  43. getItem(position)?.let { holder.bind(it, listener) }
  44. }
  45. is LoadingViewHolder -> { holder.bind(NetworkState)}
  46. }
  47. }
  48.  
  49. override fun getItemViewType(position: Int): Int {
  50. if (NetworkState == NetworkState.LOADING && position == itemCount -1){
  51. return TYPE_PROGRESS
  52. } else {
  53. return TYPE_ITEM
  54. }
  55. }
  56.  
  57. override fun getItemCount(): Int {
  58. val contentCount = super.getItemCount()
  59. if (NetworkState == NetworkState.LOADING) return contentCount +1
  60. return contentCount
  61. }
  62.  
  63. class LoadingViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
  64.  
  65. fun bind(networkState: NetworkState?) {
  66. if (networkState != null && networkState.status == NetworkState.Status.RUNNING) {
  67. itemView.visibility = View.VISIBLE
  68. } else {
  69. itemView.visibility = View.GONE
  70. }
  71. }
  72. }
  73.  
  74. open class ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
  75.  
  76. companion object {
  77. const val layoutRes = R.layout.layout_pagedlist
  78. }
  79.  
  80. open fun bind(model:Model, listener: ListListener){
  81. with(itemView){
  82. Picasso.with(itemView.context)
  83. .load(MyTransformation.imageLargePreview(model.imageCover))
  84. .into(imageView)
  85. textViewName.text = model.name
  86. textViewService.text = String.format("%s - %s, %s", model.categoryName, model.cityName, model.countryIso)
  87. textViewBudget.text = model.budgetName
  88. ratingBar.rating = model.rating
  89. textViewRaterCount.setText(model.raterCount.toString())
  90. textViewRaterCount.visibility = if (model.raterCount > 0) View.VISIBLE else View.GONE
  91. textViewFirstToReview.visibility = if (model.raterCount > 0) View.GONE else View.VISIBLE
  92. }
  93.  
  94. itemView.imageViewImage.setOnClickListener {
  95. listener?.onClickListener()
  96. }
  97. }
  98. }
  99. }
  100.  
  101. interface ListListener {
  102.  
  103. fun onClickListener()
  104.  
  105. fun onClickSort()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement