瀏覽代碼

Fixed updating books after editing

Vadik Sirekanyan 7 年之前
父節點
當前提交
1d1e1bcc36

+ 4 - 2
app/src/main/java/com/sirekanyan/knigopis/common/adapter/CommonAdapter.kt

@@ -1,10 +1,12 @@
 package com.sirekanyan.knigopis.common.adapter
 
 import android.support.v7.recyclerview.extensions.ListAdapter
+import android.support.v7.util.DiffUtil
 import android.view.ViewGroup
 
-abstract class CommonAdapter<T : CommonModel> :
-    ListAdapter<T, CommonViewHolder<T>>(SimpleItemCallback { it.id }) {
+abstract class CommonAdapter<T : CommonModel>(
+    itemCallback: DiffUtil.ItemCallback<T>
+) : ListAdapter<T, CommonViewHolder<T>>(itemCallback) {
 
     private companion object {
         private const val HEADER_TYPE = 0

+ 26 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/books/BookItemCallback.kt

@@ -0,0 +1,26 @@
+package com.sirekanyan.knigopis.feature.books
+
+import android.support.v7.util.DiffUtil
+import com.sirekanyan.knigopis.model.BookDataModel
+import com.sirekanyan.knigopis.model.BookHeaderModel
+import com.sirekanyan.knigopis.model.BookModel
+
+class BookItemCallback : DiffUtil.ItemCallback<BookModel>() {
+
+    override fun areItemsTheSame(oldItem: BookModel, newItem: BookModel) =
+        oldItem.id == newItem.id
+
+    override fun areContentsTheSame(oldItem: BookModel, newItem: BookModel) =
+        when {
+            oldItem is BookHeaderModel && newItem is BookHeaderModel -> {
+                areItemsTheSame(oldItem, newItem)
+            }
+            oldItem is BookDataModel && newItem is BookDataModel -> {
+                oldItem.title == newItem.title
+                        && oldItem.author == newItem.author
+                        && oldItem.priority == newItem.priority
+            }
+            else -> false
+        }
+
+}

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/books/BooksAdapter.kt

@@ -10,7 +10,7 @@ import com.sirekanyan.knigopis.model.BookModel
 class BooksAdapter(
     private val onClick: (BookDataModel) -> Unit,
     private val onLongClick: (BookDataModel) -> Unit
-) : CommonAdapter<BookModel>() {
+) : CommonAdapter<BookModel>(BookItemCallback()) {
 
     override fun onCreateHeaderViewHolder(parent: ViewGroup) =
         BookHeaderViewHolder(parent.inflate(R.layout.header))

+ 2 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/user/UserBooksAdapter.kt

@@ -3,13 +3,14 @@ package com.sirekanyan.knigopis.feature.user
 import android.view.ViewGroup
 import com.sirekanyan.knigopis.R
 import com.sirekanyan.knigopis.common.adapter.CommonAdapter
+import com.sirekanyan.knigopis.common.adapter.SimpleItemCallback
 import com.sirekanyan.knigopis.common.extensions.inflate
 import com.sirekanyan.knigopis.model.BookDataModel
 import com.sirekanyan.knigopis.model.BookModel
 
 class UserBooksAdapter(
     private val onLongClick: (BookDataModel) -> Unit
-) : CommonAdapter<BookModel>() {
+) : CommonAdapter<BookModel>(SimpleItemCallback { it.id }) {
 
     override fun onCreateHeaderViewHolder(parent: ViewGroup) =
         UserBookHeaderViewHolder(parent.inflate(R.layout.header))