Получение нескольких классов данных в одном адаптере Android Kotlin ⇐ Android
Получение нескольких классов данных в одном адаптере Android Kotlin
В настоящее время я новичок в разработке для Android, и у меня есть некоторые проблемы с этим. Я только что создал класс данных на основе API, а затем этот класс данных состоит из множества разных классов. Я хочу получить часть класса в одном адаптере, можно ли это сделать? Я только что попробовал, но пока могу сделать это.
пакет com.example.papb_tubes импортировать android.view.LayoutInflater импортировать android.view.ViewGroup импортировать android.widget.AdapterView.OnItemClickListener импортировать androidx.recyclerview.widget.AsyncListDiffer импортировать androidx.recyclerview.widget.DiffUtil импортировать androidx.recyclerview.widget.RecyclerView импортировать com.example.papb_tubes.databinding.ItemRowBinding класс WeatherAdapter( частный val onItemClick: OnItemClickListener ):RecyclerView.Adapter() { частный val DifferentCallback = объект: DiffUtil.ItemCallback() { переопределить fun areItemsTheSame(oldItem: AreasItem, newItem: AreasItem): Boolean { вернуть oldItem.id == newItem.id } переопределить fun areContentsTheSame(oldItem: AreasItem, newItem: AreasItem): Boolean { вернуть старыйItem == новыйItem } } частный val Different = AsyncListDiffer (это, DifferentCallback) внутренний класс ViewHolder (частная привязка val: ItemRowBinding): RecyclerView.ViewHolder(binding.root) { весело bindKota (данные: AreasItem) { привязка.применить { tvNamakota.text = data.domain } } весело bindTemperature (данные: TimesItem) { привязка.применить { tvTemperatur.text = data.celcius.toString() } } funbindTipe(данные: Проблема) { привязка.применить { tvTipe.text = данные.день } } } переопределить удовольствие onBindViewHolder(держатель: ViewHolder, позиция: Int) { val data = Different.currentList[позиция] когда (данные){ это AreasItem -> Holder.bindKota(данные) is TimesItem → Holder.bindTemperature (данные) это проблема -> держатель.bindTipe(данные) } Holder.itemView.setOnClickListener { onItemClick.onItemClick (данные) } } переопределить удовольствие onCreateViewHolder (родитель: ViewGroup, viewType: Int): ViewHolder { привязка val = ItemRowBinding.inflate(LayoutInflater.from(parent.context), родительский, false) вернуть ViewHolder (привязка) } переопределить удовольствие getItemCount(): Int = Different.currentList.size интерфейс OnClickListener{ развлечение onClickItem (данные: T) } } это класс данных
пакет com.example.papb_tubes импортировать android.os.Parcelable импортировать com.google.gson.annotations.SerializedName импортировать kotlinx.parcelize.Parcelize @Parcelize класс данных WeatherResponses( @field:SerializedName("данные") вал данные: строка, @field:SerializedName("успех") вал успех: логическое значение, @field:SerializedName("сообщение") сообщение val: строка ) : Посылки @Parcelize класс данных AreasItem( @field:SerializedName("координата") координата val: String, @field:SerializedName("уровень") уровень значения: Строка, @field:SerializedName("широта") вал широта: Строка, @field:SerializedName("домен") val домен: Строка, @field:SerializedName("описание") описание значения: Строка, @field:SerializedName("id") действительный идентификатор: строка, @field:SerializedName("тип") Тип значения: Строка, @field:SerializedName("регион") регион вал: Строка, @field:SerializedName("долгота") вал долгота: Строка, @field:SerializedName("теги") val теги: Строка, @field:SerializedName("параметры") val-параметры: строка ): Посылка @Parcelize класс данных TimesItem( @field:SerializedName("дата и время") вал дата-время: строка, @field:SerializedName("h") значение ч: Строка, @field:SerializedName("тип") Тип значения: Строка, @field:SerializedName("значение") значение val: строка, @field:SerializedName("день") день вал: Строка, @field:SerializedName("Цельций") вал Цельсия: Строка, @field:SerializedName("по Фаренгейту") валь по Фаренгейту: Струна, @field:SerializedName("код") val-код: строка, @field:SerializedName("имя") имя значения: Строка, @field:SerializedName("град") значение град: Строка, @field:SerializedName("карта") вал-карта: Строка, @field:SerializedName("sexa") вал секса: Строка, @field:SerializedName("км/ч") вал кмч: Строка, @field:SerializedName("миль в час") val mph: Строка, @field:SerializedName("мс") вал мс: Строка, @field:SerializedName("кт") вал кт: Строка ): Посылка @Parcelize класс данных ParamsItem( @field:SerializedName("раз") val раз: List, @field:SerializedName("описание") описание значения: Строка, @field:SerializedName("id") действительный идентификатор: строка, @field:SerializedName("тип") Тип значения: Строка ): Посылка @Parcelize класс данных Проблема( @field:SerializedName("месяц") val месяц: Строка, @field:SerializedName("час") val час: Строка, @field:SerializedName("год") год вал: Строка, @field:SerializedName("день") день вал: Строка, @field:SerializedName("метка времени") временная метка val: Строка, @field:SerializedName("минута") вал минута: Строка, @field:SerializedName("второй") значение второе: строка ): Посылка @Parcelize класс данных Data( @field:SerializedName("проблема") вал выпуск: Выпуск, @field:SerializedName("области") val области: List ): Посылка предыдущая попытка
[*]
Использование разных DifferCallBack для каждого элемента, который я хочу получить в адаптере, но сталкиваюсь с проблемой привязки данных
[*]
Я использую T в качестве окончательного подхода для обобщения всех поступающих входных данных, но он по-прежнему вызывает ошибку в частном val DifferentCallBack, особенно в классе areContentsThesame (я не понимаю, почему возникает ошибка == ) [*]Хотите разделить на другой адаптер, но все еще не знаете, как объединить/объединить их вместе
Я ожидаю, что смогу использовать класс AreasItem для получения домена, класс TimeItem для получения Цельсия, класс вопросов, чтобы добиться успеха
В настоящее время я новичок в разработке для Android, и у меня есть некоторые проблемы с этим. Я только что создал класс данных на основе API, а затем этот класс данных состоит из множества разных классов. Я хочу получить часть класса в одном адаптере, можно ли это сделать? Я только что попробовал, но пока могу сделать это.
пакет com.example.papb_tubes импортировать android.view.LayoutInflater импортировать android.view.ViewGroup импортировать android.widget.AdapterView.OnItemClickListener импортировать androidx.recyclerview.widget.AsyncListDiffer импортировать androidx.recyclerview.widget.DiffUtil импортировать androidx.recyclerview.widget.RecyclerView импортировать com.example.papb_tubes.databinding.ItemRowBinding класс WeatherAdapter( частный val onItemClick: OnItemClickListener ):RecyclerView.Adapter() { частный val DifferentCallback = объект: DiffUtil.ItemCallback() { переопределить fun areItemsTheSame(oldItem: AreasItem, newItem: AreasItem): Boolean { вернуть oldItem.id == newItem.id } переопределить fun areContentsTheSame(oldItem: AreasItem, newItem: AreasItem): Boolean { вернуть старыйItem == новыйItem } } частный val Different = AsyncListDiffer (это, DifferentCallback) внутренний класс ViewHolder (частная привязка val: ItemRowBinding): RecyclerView.ViewHolder(binding.root) { весело bindKota (данные: AreasItem) { привязка.применить { tvNamakota.text = data.domain } } весело bindTemperature (данные: TimesItem) { привязка.применить { tvTemperatur.text = data.celcius.toString() } } funbindTipe(данные: Проблема) { привязка.применить { tvTipe.text = данные.день } } } переопределить удовольствие onBindViewHolder(держатель: ViewHolder, позиция: Int) { val data = Different.currentList[позиция] когда (данные){ это AreasItem -> Holder.bindKota(данные) is TimesItem → Holder.bindTemperature (данные) это проблема -> держатель.bindTipe(данные) } Holder.itemView.setOnClickListener { onItemClick.onItemClick (данные) } } переопределить удовольствие onCreateViewHolder (родитель: ViewGroup, viewType: Int): ViewHolder { привязка val = ItemRowBinding.inflate(LayoutInflater.from(parent.context), родительский, false) вернуть ViewHolder (привязка) } переопределить удовольствие getItemCount(): Int = Different.currentList.size интерфейс OnClickListener{ развлечение onClickItem (данные: T) } } это класс данных
пакет com.example.papb_tubes импортировать android.os.Parcelable импортировать com.google.gson.annotations.SerializedName импортировать kotlinx.parcelize.Parcelize @Parcelize класс данных WeatherResponses( @field:SerializedName("данные") вал данные: строка, @field:SerializedName("успех") вал успех: логическое значение, @field:SerializedName("сообщение") сообщение val: строка ) : Посылки @Parcelize класс данных AreasItem( @field:SerializedName("координата") координата val: String, @field:SerializedName("уровень") уровень значения: Строка, @field:SerializedName("широта") вал широта: Строка, @field:SerializedName("домен") val домен: Строка, @field:SerializedName("описание") описание значения: Строка, @field:SerializedName("id") действительный идентификатор: строка, @field:SerializedName("тип") Тип значения: Строка, @field:SerializedName("регион") регион вал: Строка, @field:SerializedName("долгота") вал долгота: Строка, @field:SerializedName("теги") val теги: Строка, @field:SerializedName("параметры") val-параметры: строка ): Посылка @Parcelize класс данных TimesItem( @field:SerializedName("дата и время") вал дата-время: строка, @field:SerializedName("h") значение ч: Строка, @field:SerializedName("тип") Тип значения: Строка, @field:SerializedName("значение") значение val: строка, @field:SerializedName("день") день вал: Строка, @field:SerializedName("Цельций") вал Цельсия: Строка, @field:SerializedName("по Фаренгейту") валь по Фаренгейту: Струна, @field:SerializedName("код") val-код: строка, @field:SerializedName("имя") имя значения: Строка, @field:SerializedName("град") значение град: Строка, @field:SerializedName("карта") вал-карта: Строка, @field:SerializedName("sexa") вал секса: Строка, @field:SerializedName("км/ч") вал кмч: Строка, @field:SerializedName("миль в час") val mph: Строка, @field:SerializedName("мс") вал мс: Строка, @field:SerializedName("кт") вал кт: Строка ): Посылка @Parcelize класс данных ParamsItem( @field:SerializedName("раз") val раз: List, @field:SerializedName("описание") описание значения: Строка, @field:SerializedName("id") действительный идентификатор: строка, @field:SerializedName("тип") Тип значения: Строка ): Посылка @Parcelize класс данных Проблема( @field:SerializedName("месяц") val месяц: Строка, @field:SerializedName("час") val час: Строка, @field:SerializedName("год") год вал: Строка, @field:SerializedName("день") день вал: Строка, @field:SerializedName("метка времени") временная метка val: Строка, @field:SerializedName("минута") вал минута: Строка, @field:SerializedName("второй") значение второе: строка ): Посылка @Parcelize класс данных Data( @field:SerializedName("проблема") вал выпуск: Выпуск, @field:SerializedName("области") val области: List ): Посылка предыдущая попытка
[*]
Использование разных DifferCallBack для каждого элемента, который я хочу получить в адаптере, но сталкиваюсь с проблемой привязки данных
[*]
Я использую T в качестве окончательного подхода для обобщения всех поступающих входных данных, но он по-прежнему вызывает ошибку в частном val DifferentCallBack, особенно в классе areContentsThesame (я не понимаю, почему возникает ошибка == ) [*]Хотите разделить на другой адаптер, но все еще не знаете, как объединить/объединить их вместе
Я ожидаю, что смогу использовать класс AreasItem для получения домена, класс TimeItem для получения Цельсия, класс вопросов, чтобы добиться успеха
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как обновить контекстное меню элемента списка в адаптере просмотра списка Android
Anonymous » » в форуме Android - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как обновить контекстное меню элемента списка в адаптере просмотра списка Android
Anonymous » » в форуме Android - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема при вызове ScrollToPosition в адаптере recyclerview отсутствует макет
Anonymous » » в форуме Android - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как правильно настроить setOnClickListener на моем адаптере Firestore Recyclerview
Anonymous » » в форуме Android - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-