ProgressBar在RecyclerView项行中未更新

问题描述

我正在将一些照片上传到我的服务器,并且想查看单个上传的进度。但是,我的RecyclerView没有更新。

enter image description here

我知道进度正在更新,因为我可以在上传任务中看到进度,并且照片已上传到服务器。我以为 viewholder 将是我用来更新视图的东西,但是没有调用我的进度侦听器。

有人看到我做错了吗?还是可以做得更好?

PhotoUploadItem是随进度更新的对象。

class PhotoUploadItem(var photoStore: PhotoStore) {

    interface PhotoUploadProgressListener {
        fun onProgressChanged(progress: Int)
    }

    private var uploadProgress = 0
    private var listener: PhotoUploadProgressListener? = null
  

    fun setUploadProgress(uploadProgress: Int) {
        this.uploadProgress = uploadProgress
        listener?.onProgressChanged(uploadProgress)
    }

    fun subscribe(listener: PhotoUploadProgressListener) {
        this.listener = listener
    }

    fun unsubscribe() {
        this.listener = null
    }

    fun progress() = uploadProgress
    fun identifier(): Int = photoStore.key
}

PhotoUploadsAdapter列出了它们的列表。

class PhotoUploadsAdapter : RecyclerView.Adapter<PhotoUploadsAdapter.CustomViewHolder>() {

    inner class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

    private val differCallback = object : DiffUtil.ItemCallback<PhotoUploadItem>() {
        override fun areItemsTheSame(oldItem: PhotoUploadItem,newItem: PhotoUploadItem) = oldItem.identifier() == newItem.identifier()

        override fun areContentsTheSame(oldItem: PhotoUploadItem,newItem: PhotoUploadItem) = oldItem.hashCode() == newItem.hashCode()
    }

    val differ = AsyncListDiffer(this,differCallback)

    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): CustomViewHolder {
        return CustomViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_photo_upload,parent,false))
    }

    override fun getItemCount() = differ.currentList.size

    @SuppressLint("SetTextI18n")
    override fun onBindViewHolder(holder: CustomViewHolder,position: Int) {
        val item = differ.currentList[position]
        holder.itemView.apply {
            ///..... set other fields
            tvdisplayName?.text = item.photoStore.displayName
 
// THIS DOESN'T WORK
            item.subscribe(object : PhotoUploadItem.PhotoUploadProgressListener{
                override fun onProgressChanged(progress: Int) {
                    Log.i("UploadViewHolder","${item.identifier()} has progress: $progress")
                    progressBar?.progress = progress
                    tvProgressAmount?.text = String.format(Locale.ROOT,"%d%%",progress)
                }
            })

        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)