You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fragment的Dialog中隐藏Adapter内的ProgressBar?

问题分析与解决方案

核心问题

你的代码存在执行顺序倒置的问题:在ViewHolder的点击事件里,先触发Fragment的点击回调(你在回调里尝试隐藏ProgressBar),紧接着又调用了preparingDetailProgressBar.visible(),导致刚设置的隐藏操作被立刻覆盖,进度条始终处于显示状态。

修复步骤

  1. 调整ViewHolder点击事件的执行顺序
    先调用visible()显示进度条,再触发Fragment的回调:
class PreparedViewHolder(private val binding: ItemPreparingBinding) :
    RecyclerView.ViewHolder(binding.root) {
    fun bind(
        data: PreparedOrdersResponse,
        _preparedOnItemClickListener: PreparedOnItemClickListener,
        preparedOnItemDetailClickListener: PreparedOnItemDetailClickListener
    ) {
        binding.apply {
            detailAreaLinearPreparing.setOnClickListener {
                // 先显示进度条
                preparingDetailProgressBar.visible()
                preparedOnItemDetailClickListener.onClick(
                    data,
                    it,
                    binding.preparingDetailProgressBar
                )
            }
            linearTime.setOnClickListener {
                // 先显示进度条
                preparingDetailProgressBar.visible()
                preparedOnItemDetailClickListener.onClick(
                    data,
                    it,
                    binding.preparingDetailProgressBar
                )
            }
        }
    }
}
  1. 确认View扩展函数的正确性
    检查visible()和gone()扩展函数是否正确实现:
fun View.visible() {
    visibility = View.VISIBLE
}

fun View.gone() {
    visibility = View.GONE
}
  1. Dialog中的隐藏操作保持不变
    你在detailOrderDialog里调用preparingDetailProgressBar.gone()的逻辑是正确的,调整顺序后即可生效。

额外排查点

如果调整顺序后仍无效,可检查:

  • ProgressBar是否被布局中的其他View遮挡
  • 布局文件中ProgressBar的visibility初始属性是否存在冲突
  • 确保所有操作都在主线程执行(当前代码默认在主线程,无需额外处理)

内容的提问来源于stack exchange,提问作者Ömer Seyfettin Yavuzyiğit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:25:13