Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- abstract class BaseRecyclerViewAdapter<Model> : RecyclerView.Adapter<BaseViewHolder<Model>>() {
- var data: MutableList<Model> = arrayListOf()
- set(value) {
- field.clear()
- Collections.copy(field, value)
- notifyDataSetChanged()
- }
- override fun getItemCount(): Int = data.size
- override fun onBindViewHolder(holder: BaseViewHolder<Model>, position: Int) {
- holder.bind(data[position])
- }
- fun addItems(data: List<Model>) {
- val startIndex = this.data.size
- Collections.copy(this.data, data)
- notifyItemRangeInserted(startIndex, data.size)
- }
- fun addItem(item: Model) {
- data.add(item)
- notifyItemInserted(data.size - 1)
- }
- fun addItem(item: Model, position: Int) {
- if (isValidRange(position, true)) {
- data.add(position, item)
- notifyItemInserted(position)
- }
- }
- fun updateItem(position: Int, item: Model) {
- if (isValidRange(position)) {
- data[position] = item
- notifyItemChanged(position)
- }
- }
- fun getItem(position: Int): Model? {
- return if (isValidRange(position)) {
- data[position]
- } else {
- null
- }
- }
- /
- * O(n) complexity!
- */
- fun removeItem(item: Model) {
- val position = data.indexOf(item)
- removeItem(position)
- }
- fun removeItem(position: Int) {
- if (isValidRange(position)) {
- data.removeAt(position)
- notifyItemRemoved(position)
- }
- }
- private fun isValidRange(position: Int, insertion: Boolean = false): Boolean {
- val endRange = if (insertion) data.size + 1 else data.size
- return position in 0 until endRange
- }
- }
Add Comment
Please, Sign In to add comment