Я получаю сообщение об ошибке: «Канал необратимо поврежден и будет удален!» и мое приложение вылетает, когда я пытаюсь быстро прокрутить ресайклер вправо, затем влево и так далее.
Вот мой фрагмент:< /p>
Код: Выделить всё
class ImageGalleryFragment : Fragment() {
private val navArgs by navArgs()
private val viewModel: ImageGalleryViewModel by viewModels {
ImageGalleryViewModelFactory(
requireContext(),
navArgs.movieId,
navArgs.materialId,
navArgs.isExclusive
)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentImageGalleryBinding.inflate(inflater, container, false)
viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
val imagesAdapter = ImageGalleryAdapter(lostFocus = {})
with(binding) {
rvImages.adapter = imagesAdapter
rvImages.addItemDecoration(
LinearHorizontalSpacingDecoration(
requireContext().resources.getDimension(
dimen.list_grid_small_item_horizontal_margin
).toInt(),
true
)
)
ivBack.setOnClickListener { findNavController().popBackStack() }
subscribers(imagesAdapter)
}
}
override fun onResume(owner: LifecycleOwner) {
viewModel.onEvent(Event.SendAnalyticsOnPageOpened)
super.onResume(owner)
}
override fun onDestroy(owner: LifecycleOwner) {
binding.rvImages.adapter = null
}
})
binding.ivBack.doOnLayout {
binding.ivBack.requestFocus()
}
return binding.root
}
private fun FragmentImageGalleryBinding.subscribers(
imageGalleryAdapter: ImageGalleryAdapter
) {
viewModel.state
.map { it.materialName }
.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.distinctUntilChanged()
.filterNotNull()
.onEach { updateView(it) }
.launchIn(viewLifecycleOwner.lifecycleScope)
viewModel.state
.map { it.imageAssets }
.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.distinctUntilChanged()
.filterNotNull()
.onEach { imagesList ->
imageGalleryAdapter.submitList(imagesList)
}
.launchIn(viewLifecycleOwner.lifecycleScope)
}
private fun FragmentImageGalleryBinding.updateView(galleryName: String) {
tvGalleryName.text = galleryName
}
}
Код: Выделить всё
class ImageGalleryAdapter(
private val lostFocus: () -> Unit,
) : ListAdapter(DiffUtils()) {
class DiffUtils : DiffUtil.ItemCallback() {
override fun areItemsTheSame(
old: ImageAsset,
new: ImageAsset
): Boolean = old.url == new.url
override fun areContentsTheSame(
old: ImageAsset,
new: ImageAsset
): Boolean = false
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ImageGalleryItemViewHolder(
ItemGalleryImageBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
),
)
override fun onBindViewHolder(holder: ImageGalleryItemViewHolder, position: Int) {
holder.onBind(item = getItem(position))
}
}
Код: Выделить всё
class ImageGalleryItemViewHolder(
private val view: ItemGalleryImageBinding,
) : RecyclerView.ViewHolder(view.root) {
fun onBind(item: ImageAsset) {
with(view) {
ivImage.load(item.url) {
crossfade(true)
crossfade(250)
placeholder(R.drawable.ic_gallery_image_placeholder)
}
}
}
}
Код: Выделить всё
Буду рад любой помощи или предложениям по этому вопросу.
Подробнее здесь: https://stackoverflow.com/questions/792 ... osed-error