Size: a a a

Android Developers

2020 July 03

d

danilshik in Android Developers
Ребят можно как нибудь DiffUtilCallback вынести из adapter, так как по сути идет дублирование кода в каждом adapter?

Для areContentsTheSame использую hashCode, а вот для areItemsTheSame ничего не могу придумать
источник

Y

Yaroslav in Android Developers
danilshik
Ребят можно как нибудь DiffUtilCallback вынести из adapter, так как по сути идет дублирование кода в каждом adapter?

Для areContentsTheSame использую hashCode, а вот для areItemsTheSame ничего не могу придумать
Всм вынести?
источник

Н

Николай in Android Developers
danilshik
Ребят можно как нибудь DiffUtilCallback вынести из adapter, так как по сути идет дублирование кода в каждом adapter?

Для areContentsTheSame использую hashCode, а вот для areItemsTheSame ничего не могу придумать
Сделать интерфейс с дефолтным методом areContentTheSame и не определённым вторым методом. А там где тебе нужно юзать интерфейс - создавать объект при этом определять второй метод относительно ситуации
источник

d

danilshik in Android Developers
Yaroslav
Всм вынести?
fun updateData(data : List<ChatItem>){
       Log.d("M_ChatAdapter", "update data adapter - new data ${data.size} hash : ${data.hashCode()}" +
               " old ${items.size} hash: ${items.hashCode()}")

       val diffCallback = object : DiffUtil.Callback(){
           override fun areItemsTheSame(oldPos: Int, newPos: Int): Boolean = items[oldPos].id == data[newPos].id

           override fun areContentsTheSame(oldPos: Int, newPos: Int): Boolean = items[oldPos].hashCode() == data[newPos].hashCode()

           override fun getOldListSize(): Int = items.size

           override fun getNewListSize(): Int = data.size

       }

       val diffResult = DiffUtil.calculateDiff(diffCallback)
       
       items = data
       diffResult.dispatchUpdatesTo(this)

По сути меняется только тип List
источник

d

danilshik in Android Developers
class MyDiff<T>(val oldItem: List<T>, val newOld: List<T>) : DiffUtil.Callback() {
   override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean = oldItem[oldItemPosition].id == newItem[newItemPositon].id

   override fun getOldListSize(): Int {
       TODO("Not yet implemented")
   }

   override fun getNewListSize(): Int {
       TODO("Not yet implemented")
   }

   override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
       TODO("Not yet implemented")
   }
}

Я захотел вынести его из Adapter, но что-то не могу что вместо id использовать
источник

Я

Ярослав in Android Developers
danilshik
Ребят можно как нибудь DiffUtilCallback вынести из adapter, так как по сути идет дублирование кода в каждом adapter?

Для areContentsTheSame использую hashCode, а вот для areItemsTheSame ничего не могу придумать
А зачем?
источник

d

danilshik in Android Developers
Ярослав
А зачем?
Что зачем? Зачем выносить?
источник

Я

Ярослав in Android Developers
Да, выносить
источник

d

danilshik in Android Developers
Убрать дублирование
источник

Y

Yaroslav in Android Developers
danilshik
fun updateData(data : List<ChatItem>){
       Log.d("M_ChatAdapter", "update data adapter - new data ${data.size} hash : ${data.hashCode()}" +
               " old ${items.size} hash: ${items.hashCode()}")

       val diffCallback = object : DiffUtil.Callback(){
           override fun areItemsTheSame(oldPos: Int, newPos: Int): Boolean = items[oldPos].id == data[newPos].id

           override fun areContentsTheSame(oldPos: Int, newPos: Int): Boolean = items[oldPos].hashCode() == data[newPos].hashCode()

           override fun getOldListSize(): Int = items.size

           override fun getNewListSize(): Int = data.size

       }

       val diffResult = DiffUtil.calculateDiff(diffCallback)
       
       items = data
       diffResult.dispatchUpdatesTo(this)

По сути меняется только тип List
Разве что делать List<Any>, а потом проверять какой у тебя тип и сравнивать уже
источник

Y

Yaroslav in Android Developers
🤷‍♂
источник

Я

Ярослав in Android Developers
danilshik
Ребят можно как нибудь DiffUtilCallback вынести из adapter, так как по сути идет дублирование кода в каждом adapter?

Для areContentsTheSame использую hashCode, а вот для areItemsTheSame ничего не могу придумать
https://m.habr.com/ru/post/337774/
Наверное это, но я не уверен
источник

AD

Aleksey D. in Android Developers
Oleg Pchelkin
conductor)
где-то рядом с переписванием всего приложения с фрагментов на вьюхи, да?)
источник

d

danilshik in Android Developers
В принципе да, я в принципе сам до этого додумался, хотел baseClass создать с единственный параметров id, спасибо
источник

d

danilshik in Android Developers
А то Adapterов много, и лишний код зачем нужен
источник

DB

Dmytro Borysov in Android Developers
danilshik
В принципе да, я в принципе сам до этого додумался, хотел baseClass создать с единственный параметров id, спасибо
зачем пользоваться дифф утилом, если ты реализуешь только сейм айтемс?
источник

d

danilshik in Android Developers
Dmytro Borysov
зачем пользоваться дифф утилом, если ты реализуешь только сейм айтемс?
что за сейм?
источник

DB

Dmytro Borysov in Android Developers
danilshik
что за сейм?
а, не правильно прочитал.. забей, ты сказал одно, а в коде другое
источник

OP

Oleg Pchelkin in Android Developers
Aleksey D.
где-то рядом с переписванием всего приложения с фрагментов на вьюхи, да?)
Ага) но в целом там методы почти как у фрагмента, так что изи если не оч много фрагментов) но это да, для упоротых😁
источник

GC

Granderbird Chevencu... in Android Developers
Пытаюсь создать файл, но пишет java.io.IOException: Permission denied, хотя пермишены на чтение\запись есть и возвращабт true, что не так?
источник