【问题标题】:Blocking UI interaction on a Fragment阻止片段上的 UI 交互
【发布时间】:2013-08-15 11:28:50
【问题描述】:

我希望能够阻止所有 UI 与片段的交互,直到发生回调。

我有两个按钮:ButtonA 和 ButtonB。

ButtonA 显示一个进度条并启动一个异步线程,该线程在完成后回调片段。与此同时,有人可以按我不想允许的 ButtonB。

我的解决方案是启动另一个透明的片段并拦截所有点击。然而,FragmentManagers commit() 和实际工作的片段之间似乎存在延迟。
我已经尝试调用 executePendingTransactions(),但我仍然遇到线程问题,即在用户点击 ButtonB 之前,片段不处于接受 onClick 事件的状态。

有没有更优雅的解决方案?

谢谢,

约翰

【问题讨论】:

    标签: android android-fragments transactionmanager


    【解决方案1】:

    另一个选项是使用进度对话框片段并将其设置为不可取消。它将覆盖片段并阻止底层片段接收任何触摸事件。

    【讨论】:

      【解决方案2】:

      您可以在当前视图上方有另一个带有进度对话框的透明视图,而不是调用另一个片段,并相应地使其可见性 VIEW 或 GONE。否则,您可以简单地显示一个带有可取消参数为 false 的进度对话框。

      【讨论】:

      • 我认为@johncc 不想让用户按下按钮 B,因为这可能会导致错误,而不是因为他不想隐藏进度对话框
      【解决方案3】:

      调用按钮B.setEnabled(false);点击按钮A后。

      CustomButton extends View {
      
           private boolean mIsEnabled = true;
      
           public void setEnabled (boolean enabled) {
              this.mIsEnabled = enabled;
           }
      
      
           @Override
           public void onClick() {
                if (mIsEnabled) {
                     mOnClickListener.onClick();
                } else {
                    return;
                }
           }
      
      
      }
      

      【讨论】:

      • 对不起,应该提到也有实现 onClick 的自定义视图不公开 setEnabled(bool)
      • 他们应该公开一个 setEnabled 方法。所有视图都应该。
      • 所以你有自定义按钮视图?将方法 setEnabled 添加到它的代码并覆盖 onClick 方法。 @Snicolas - 是的,每个视图都应该公开 setEnabled,但根据 android 文档 - “启用状态的解释因子类而异。”
      • 是的! @Semyon Danilov。与 onCreate 相同,从活动到片段和应用程序。但是,所有人都有一个,语义只是相同的。
      【解决方案4】:

      我没有完全理解这个问题.. 希望它可以帮助你。 当您在其上添加透明片段时,使透明布局可点击=true

      如果一个视图被提及为可点击,它不会将触摸事件传递给下面的视图。

      对不起,如果我理解错了你的问题。

      【讨论】:

        【解决方案5】:

        按钮 A 不能将其包含的活动置于给定状态(在其侦听器中引发布尔标志)并且按钮 B 在执行任何操作之前读取该标志吗?

        我认为这不仅仅是一个 UI 问题,还有一些你应该实现的表示逻辑和迷你状态机。这个机制加上你已经拥有的片段应该足以防止 UI 线程事件的执行顺序出现间隙。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-11
          • 1970-01-01
          • 2021-02-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多