Guest User

Untitled

a guest
Dec 14th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. abstract class BaseRecyclerViewAdapter<Model> : RecyclerView.Adapter<BaseViewHolder<Model>>() {
  2.  
  3. var data: MutableList<Model> = arrayListOf()
  4. set(value) {
  5. field.clear()
  6. Collections.copy(field, value)
  7. notifyDataSetChanged()
  8. }
  9.  
  10. override fun getItemCount(): Int = data.size
  11.  
  12. override fun onBindViewHolder(holder: BaseViewHolder<Model>, position: Int) {
  13. holder.bind(data[position])
  14. }
  15.  
  16. fun addItems(data: List<Model>) {
  17. val startIndex = this.data.size
  18. Collections.copy(this.data, data)
  19. notifyItemRangeInserted(startIndex, data.size)
  20. }
  21.  
  22. fun addItem(item: Model) {
  23. data.add(item)
  24. notifyItemInserted(data.size - 1)
  25. }
  26.  
  27. fun addItem(item: Model, position: Int) {
  28. if (isValidRange(position, true)) {
  29. data.add(position, item)
  30. notifyItemInserted(position)
  31. }
  32. }
  33.  
  34. fun updateItem(position: Int, item: Model) {
  35. if (isValidRange(position)) {
  36. data[position] = item
  37. notifyItemChanged(position)
  38. }
  39. }
  40.  
  41. fun getItem(position: Int): Model? {
  42. return if (isValidRange(position)) {
  43. data[position]
  44. } else {
  45. null
  46. }
  47. }
  48.  
  49. /
  50. * O(n) complexity!
  51. */
  52. fun removeItem(item: Model) {
  53. val position = data.indexOf(item)
  54. removeItem(position)
  55. }
  56.  
  57. fun removeItem(position: Int) {
  58. if (isValidRange(position)) {
  59. data.removeAt(position)
  60. notifyItemRemoved(position)
  61. }
  62. }
  63.  
  64. private fun isValidRange(position: Int, insertion: Boolean = false): Boolean {
  65. val endRange = if (insertion) data.size + 1 else data.size
  66. return position in 0 until endRange
  67. }
  68. }
Add Comment
Please, Sign In to add comment