Recyclerview ListAdapter DiffUtil не работает должным образом

Удивительно, что никто не предложил это, но:

import java.util.UUID

UUID.randomUUID().toString();

Легко.

Преимущество этого в том, что UUID являются хорошими и длинными и гарантированно почти невозможно столкнуться.

Википедия имеет хорошее объяснение:

«... только после генерации 1 миллиарда UUID каждую секунду в течение следующих 100 лет вероятность создания всего одного дубликата будет около 50%».

http: // ru.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

Первые 4 бита - это тип версии и 2 для варианта, так что вы получаете 122 бит случайных значений. Поэтому, если вы хотите , вы можете обрезать с конца, чтобы уменьшить размер UUID. Это не рекомендуется, но у вас все еще есть множество случайностей, достаточно для ваших записей 500k.

0
задан Jaymin 16 January 2019 в 15:03
поделиться

1 ответ

Ну, я обнаружил, что проблема заключалась в том, что я копировал исходное содержимое таким образом, чтобы не делать фактическое копирование содержимого, а делать ссылки. Поэтому я исправил проблему, скопировав содержимое элемента в новый экземпляр itemModel. После этого diff util способен дифференцировать должным образом.

Вместо этого,

private fun updateItem(item: ItemModel, status: Status) {
       ......................................................


            for ((index, el) in currentItems.withIndex()) {
                if (el.id == item.id) {
                    val currentItem = currentItems.removeAt(index)

                    currentItem.status = status
                    currentItems.add(index, currentItem)
                    break
                }
            }
            itemModels.value = currentItems
          ......................................
    }

Я сделал это,

private fun updateItem(item: ItemModel, status: Status) {
...............
    if (el.id == item.id) {
         currentItems.removeAt(index)
         val currentItem = ItemModel(item.id, "${item.title}, ${status.progress}")
         currentItem.status = status
         currentItems.add(index, currentItem)
         break
     }
...........
}
0
ответ дан odifek 16 January 2019 в 15:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: