我在使用DialogFragment
时处理解雇/状态损失地狱。为了避免无效解雇,我要覆盖dismiss
方法:
@Override
public void dismiss() {
if (this.isVisible()) {
super.dismiss();
}
}
但即使对话框实际上可见,isVisible()
也是false
。这就是isVisible()
方法在其文档中所说的内容:
如果片段当前对用户可见,则返回true。这个 意思是:(1)已添加,(2)其视图附在窗口上, (3)不隐藏。
因此,如果我将方法更改为:
@Override
public void dismiss() {
// This is almost the same as isVisible(), but the latter doesn't
// work
if (this.isAdded() && !this.isDetached() && !this.isHidden()) {
super.dismiss();
}
}
然后它完美地运作。这是预期的行为吗?
使用Ion的HTTP请求后执行所有操作:
DialogFragment dialog = DialogFragment.newInstance(..., ...);
Ion.with(context, url)
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
dialog.dismiss()
}
});
dialog.show(getFragmentManager(), "tag");