我希望能够阻止与片段的所有UI交互,直到发生回调。
我有两个按钮:ButtonA和ButtonB。
ButtonA显示一个进度条并启动一个异步线程,该线程在完成后回调该片段。在此期间,有人可以按下我不想允许的ButtonB。
我的解决方案是旋转另一个透明的片段并拦截所有点击。但是,FragmentManagers commit()和实际工作的片段之间似乎存在延迟 我试过调用executePendingTransactions()但我仍然遇到线程问题,即片段在用户点击ButtonB之前不处于接受onClick事件的状态。
有更优雅的解决方案吗?
谢谢,
约翰
答案 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线程事件的执行顺序出现空白。