В моем приложении я хочу использовать вложенные представления recyclerview.
Один из этих представлений Recyclerview для отображения списка data и другое Recyclerview должно отображать список изображений.
Например, изображение ниже:
У меня странная проблема!
Когда у меня больше одного изображения, скопируйте одно изображение и замените его другими изображениями!
Чтобы показать изображения с сервера, сервер отправляет мне base64, и я декодирую его, а затем показываю в адаптере.
< /p>
Код моего адаптера для шоу-листа:
Код: Выделить всё
class TestsListAdapterSimple(val items: List) : RecyclerView.Adapter() {
private lateinit var context: Context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemTestHistoryBinding.inflate(LayoutInflater.from(parent.context), parent, false)
context = parent.context
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(items[position])
holder.setIsRecyclable(false)
}
override fun getItemCount() = items.size
inner class ViewHolder(private val binding: ItemTestHistoryBinding) : RecyclerView.ViewHolder(binding.root) {
@SuppressLint("SetTextI18n", "CheckResult")
fun bind(item: Result) {
binding.apply {
if (item.files != null) {
if (item.files.isNotEmpty()) {
val imagesAdapter = ImagesAdapterSimple(item.files.toMutableList(), context)
//imagesAdapter.setData(item.files)
avatarImg.apply {
addItemDecoration(OverlapRecyclerViewDecoration(3, -100))
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
setHasFixedSize(true)
adapter = imagesAdapter
}
}
}
//Click
binding.root.setOnClickListener {
onItemClickListener?.let {
it(item)
}
}
}
}
}
private var onItemClickListener: ((Result) -> Unit)? = null
fun setOnItemClickListener(listener: (Result) -> Unit) {
onItemClickListener = listener
}
}
Код: Выделить всё
class ImagesAdapterSimple(val items: MutableList, val context: Context) :
RecyclerView.Adapter() {
private val userToken by lazy { GoodPrefs.getInstance().getString(USER_TOKEN, "") }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImagesAdapterSimple.ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ItemCircleImagesBinding.inflate(inflater, parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ImagesAdapterSimple.ViewHolder, position: Int) {
holder.bind()
holder.setIsRecyclable(false)
}
override fun getItemCount() = if (items.size > 2) 3 else 1
inner class ViewHolder(private val binding: ItemCircleImagesBinding) : RecyclerView.ViewHolder(binding.root) {
@SuppressLint("CheckResult")
fun bind() {
binding.apply {
items.forEach { item ->
avatarLoading.visibility = View.VISIBLE
ApiClient.getInstance().apisUseCase().getAvatarImage(userToken, item.id!!)
.applyIoScheduler()
.subscribe({
avatarLoading.visibility = View.GONE
if (it.isSuccessful) {
if (it.code() == 200) {
if (it.body() != null) {
val decodedBytes: ByteArray = Base64.decode(it.body()!!.data!!.file, Base64.DEFAULT)
avatarImg.load(decodedBytes)
}
}
}
}, {
avatarLoading.visibility = View.GONE
})
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/780 ... cyclerview
Мобильная версия