我试图让一个dialogfragment关闭时的动画 - 我试图改写为下面的解雇,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()
它会递归调用你已经在功能!
编辑:
在外部类中定义的包装方法或与YourDialogFragment.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
您可以通过调用类及其超级访问外部类,其中听众坐在简单。 像这样的: Classname.super.method()
public void dismiss() {
yourAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
classNameOfYourDialog.super.dismiss();
}
@Override
public void onAnimationRepeat(Animation animation) {}
});
}