Kotlin. Работа с adapter и списком
С помощью retrofit получаю API с сайта. Помещаю данные в data-класс следующего вида:
data class GifFromAPI (
@SerializedName("data") val data: ArrayList<GifData>
)
data class GifData (
@SerializedName("images") val images: ImageList
)
data class ImageList (
@SerializedName("fixed_height") val fixed_height: FixedHeight
)
data class FixedHeight (
@SerializedName("url") val url: String
)
И хочу вывести в RecyclerView, например, 10 gif элементов (такое количество API получил с сайта). Чтобы добавить на экран gif, обращаюсь к url следующим образом:
gifUri.data[number].images.fixed_height.url
Только не совсем понимаю, где мне этот цикл указать, чтобы пройтись по всем элементам data[number], чтобы это значение увеличивалось? Вот мой адаптер:
class GifAdapter : RecyclerView.Adapter<GifAdapter.GifViewHolder>() {
var listURI: List<GifFromAPI> = emptyList()
set(value) {
field = value
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GifViewHolder =
GifViewHolder(ItemGifBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
))
override fun onBindViewHolder(holder: GifViewHolder, position: Int) {
holder.bind(listURI[position], 1)
}
override fun getItemCount() = listURI.size
class GifViewHolder(private val binding: ItemGifBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(gifUri: GifFromAPI, number: Int) {
Glide.with(binding.root.context)
.asGif()
.load(gifUri.data[number].images.fixed_height.url)
.into(binding.itemGif)
binding.itemGifTextInfo.text = gifUri.data[number].id
Log.v(LOG_VIEW, "${gifUri.data[number].id}")
}
}
}
А это фрагмент, где я обращаюсь к adapter.
class GifFragment : Fragment(R.layout.fragment_gifs_list) {
private lateinit var binding: FragmentGifsListBinding
private lateinit var viewModelProvider: ViewModelProvider
private lateinit var loadAdapter: GifAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentGifsListBinding.bind(view)
viewModelProvider = ViewModelProvider(this)
viewModelProvider.get(GifViewModel::class.java).also {
it.gifLiveData.observe(viewLifecycleOwner, {data -> showContent(data)})
it.fetchGif()
}
loadAdapter = GifAdapter()
binding.listGifs.apply {
adapter = loadAdapter
layoutManager = LinearLayoutManager(context)
}
}
/**
* проверка данных, полученных с сайта,
* в логах смотрел полученные данные
*/
private fun showContent(gif: GifFromAPI) {
loadAdapter.listURI = listOf(gif)
binding.apply {
for (i in 0..9) {
Log.v(LOG_VIEW, "This is id ==== ${gif.data[i].id} ////// This is URL ==== ${gif.data[i].url}\n")
Log.v(LOG_VIEW, "${gif.data.size}")
}
}
}
}