1

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

我有两个按钮:ButtonA 和 ButtonB。

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

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

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

谢谢,

约翰

4

5 回答 5

0

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

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

于 2013-08-16T22:39:18.267 回答
0

调用 buttonB.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;
          }
     }


}
于 2013-08-15T11:35:55.870 回答
0

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

于 2013-08-15T11:44:42.713 回答
0

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

于 2013-08-15T11:45:25.930 回答
0

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

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

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

于 2013-08-15T12:19:25.177 回答