
@OverrIDepublic 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. 看起来你非常接近,只是你应该在onAnimationEnd()中调用super.dismiss()而不是dismiss().原因是如果你调用dismiss(),它将递归调用你已经在的函数!
编辑:
在外部类中定义包装器方法或使用YourDialogFragment.super()调用它.
voID parentdismiss() { super.dismiss() } 并从你的onAnimationEnd()调用它.
即使这样,当你取消对话时,你仍然会遇到一个与竞争条件有关的问题,并且被另一个线程解雇了.要解决这个问题,请在第一次调用ondismiss()时设置一个布尔值mIsdismissed,以便在另一个onStart()发生之前再次调用它(你将覆盖onStart()以反转布尔值)ondismiss()的正文没有执行两次.
我在这里写了一个解决方案,它不使用DialogFragment,只是一个常规的Dialog.它经过测试和工作,所以只需查看我使用的逻辑并将其复制,或者如果您愿意,请使用它.
https://github.com/tom-dignan/nifty/blob/master/src/com/tomdignan/nifty/dialogs/NiftyProgressDialog.java
总结以上是内存溢出为你收集整理的android – 在dismiss上设置对话框片段的动画全部内容,希望文章能够帮你解决android – 在dismiss上设置对话框片段的动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)