我试图让一个对话框片段在关闭时进行动画处理 - 我试图覆盖下面的解雇,onDismiss,onCancel 和 onDestroy 方法,但没有运气 - 有人可以指出我正确的方向吗?
@Override
public void dismiss() {
if (mDismissAnimationFinished) {
super.dismiss();
} else {
mShrink.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
mDismissAnimationFinished = true;
dismiss();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mCurrentContainer.startAnimation(mShrink);
}
}
我只是用常规对话框子类执行此操作,我的解决方案应该转移到DialogFragment
确切地。
看起来你们很接近,只是你应该打电话super.dismiss()
在 onAnimationEnd() 而不是dismiss()
。原因是如果你打电话dismiss()
,它会递归调用你已经在的函数!
EDIT:
在外部类中定义一个包装方法或使用您的 DialogFragment.super() 调用它。
void parentDismiss() { super.dismiss() }
并从你的电话中调用它onAnimationEnd()
.
即使如此,当您取消对话框并且它被另一个线程取消时,您仍然会遇到竞争条件的另一个问题。为了解决这个问题,设置一个布尔值mIsDismissed
第一次调用 onDismiss() 时,如果在另一个调用之前再次调用它onStart()
发生(您将重写 onStart() 以将布尔值翻转回来)onDismiss()
的身体不会被执行两次。
我这里写了一个解决方案,没有使用DialogFragment
,只是一个普通的对话框。它已经过测试并且可以工作,因此只需查看我使用的逻辑并复制它,或者如果您愿意,可以使用它。
https://github.com/tom-dignan/nifty/blob/master/src/com/tomdignan/nifty/dialogs/NiftyProgressDialog.java https://github.com/tom-dignan/nifty/blob/master/src/com/tomdignan/nifty/dialogs/NiftyProgressDialog.java
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)