阻止片段上的UI交互

时间:2013-08-15 11:28:51

标签: android android-fragments transactionmanager

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

我有两个按钮:ButtonA和ButtonB。

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

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

有更优雅的解决方案吗?

谢谢,

约翰

5 个答案:

答案 0 :(得分:0)

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

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;
          }
     }


}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我完全不明白这个问题。 希望它可以帮助你。 当你在其上添加transaprent片段时,使透明布局clickable = true

如果视图被提及为可点击,则不会将触摸事件传递给下方视图。

抱歉,如果我错误地提出你的问题。

答案 4 :(得分:0)

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

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