我希望能够阻止与片段的所有UI交互,直到发生回调。
我有两个按钮:按钮A和按钮B。
ButtonA显示了一个进度条,并启动了一个异步线程,该线程在完成后调用回片段。在此期间,有人可以按下按钮B,但我不想允许。
我的解决方案是旋转另一个片段,它是透明的,可以拦截所有点击。然而,在FragmentManagers commit()和片段实际工作之间似乎存在延迟
我尝试过调用executePendingTransactions(),但最终还是遇到了线程问题,即在用户点击ButtonB之前,片段不处于接受onClick事件的状态。
有没有更优雅的解决方案?
谢谢,
John
另一个选项是使用进度对话框片段并将其设置为不可取消。它将覆盖片段并防止底层片段接收任何触摸事件。
您可以在当前视图上方拥有另一个带有进度对话框的transparent视图,而不是调用另一个片段,并相应地使其可见性为view或GONE。否则,u可以简单地显示一个可取消参数为false的进程对话框。
调用按钮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;
}
}
}
我没有完全理解这个问题。。希望它能帮助你。当你在上面添加transprent片段时,使透明布局可点击=真正的
如果一个视图被提及为可点击,它不会将触摸事件传递给下面的视图。
对不起,如果我把你的问题理解错了。
按钮A不能将其包含的活动置于给定状态(在其侦听器中引发布尔标志),而按钮B不能在做任何事情之前读取该标志吗?
我认为这不仅仅是一个UI问题,还应该实现一些表示逻辑和迷你状态机。这个机制加上您已经拥有的片段应该足以防止UI线程事件执行序列中出现间隙。