** Я хочу уведомить о том, что дочерний элемент утилизатора изменился после завершения загрузки, без уведомления всех dataSetChanged. **
класс ParentAdapter (частный слушатель val: (slug: String, position: Int) -> Unit, частный val childItemDownloadListener: (child: LearningDataResult, parentPosition: Int, childPosition: Int) -> Unit, частный val childItemClickListener: (child: LearningDataResult, позиция: Int) -> Unit): ImmutableRecyclerAdapter () {private var viewPool = RecyclerView.RecycledViewPool () lateinit var childAdapter: Переопределение childAdapter val itemLayoutId: Int = R.layout.content_learning
* 1003 1004 *}
class ChildAdapter (закрытый val childDownloadListener: (дочерний: LearningDataResult, позиция: Int) -> Единица, частный val childItemClickListener: (дочерний элемент: LearningDataResult, позиция: Int) -> Unit):
ImmutableRecyclerAdapter<LearningDataResult>() {
override val itemLayoutId: Int = R.layout.content_child_recycler_item
override var items: List<LearningDataResult> by Delegates.observable(emptyList()) { _, old, new ->
autoNotify(old, new) { o, n -> o == n }
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.setIsRecyclable(false)
val child = items[position]
with(holder.itemView) {
tv_learn_title.text = child.title
iv_learn.load(child.skillLogo, R.drawable.ic_grey)
tv_item_category.text = child.category
val dir = File("/LevelUp/downloads")
var fileName = "${child.uuid}"
val file =
Environment.getExternalStorageDirectory().path + dir
val downloadItemData = File(file, fileName)
if (downloadItemData.exists()) {
iv_download.invisible()
iv_downloaded.visible()
}
when (child.downloadStatus) {
IDLE -> {
download_progress.gone()
iv_download.visible()
iv_downloaded.gone()
}
DOWNLOADING -> {
download_progress.visible()
iv_download.invisible()
iv_downloaded.invisible()
}
DOWNLOADED -> {
download_progress.gone()
iv_download.invisible()
iv_downloaded.visible()
}
}
iv_download.setOnClickListener {
(holder.itemView.context as AppCompatActivity).askRequiredPermission(
arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
) {
download_progress.visible()
iv_download.invisible()
iv_downloaded.invisible()
childDownloadListener.invoke(child, position)
}
}
setOnClickListener {
childItemClickListener.invoke(child, position)
}
}
}
}