Przeglądaj źródła

fix: ConversationListAdapter防止NPE

wutiaorong 8 miesięcy temu
rodzic
commit
7314482b2e

+ 14 - 2
module/message/src/main/java/com/adealink/weparty/message/conversationlist/ConversationListAdapter.kt

@@ -33,11 +33,23 @@ class ConversationListAdapter(listener: IViewProviderListener<BaseUiConversation
                 override fun getNewListSize(): Int = newList.size
 
                 override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
-                    return oldList[oldItemPosition].conversationKey == newList[newItemPosition].conversationKey
+                    val oldItem = oldList.getOrNull(oldItemPosition)
+                    val newItem = newList.getOrNull(newItemPosition)
+                    return when {
+                        oldItem != null && newItem != null -> oldItem.conversationKey == newItem.conversationKey
+                        oldItem == null && newItem == null -> true
+                        else -> false
+                    }
                 }
 
                 override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
-                    return !newList[newItemPosition].isChange
+                    val oldItem = oldList.getOrNull(oldItemPosition)
+                    val newItem = newList.getOrNull(newItemPosition)
+                    return when {
+                        oldItem != null && newItem != null -> oldItem == newItem || !newItem.isChange
+                        oldItem == null && newItem == null -> true
+                        else -> false
+                    }
                 }
             }