Closed githubliangzai closed 3 years ago
bug 我这边 复现了,应该找到原因了, 马上解决
implementation 'com.github.iielse:imageviewer:2.1.8'
试下这个
大佬威武
已经用最新的版本了,我再观察下还会不会崩溃,具体原因是啥额,是执行退出动画的时候DialogFragment被销毁了么,但是什么情况下会导致执行退出动画时DialogFragment被销毁呢
上面是因为在 dialogFragment onDestroyView后了, 还在调用 fragment.dismissAllowingStateLoss() 崩溃的. 我自测是在 onRelease方法中直接调用 activity.finish() 触发了的.
解决方案是监听 fragment的声明周期,onDestroyView后加个标记.
fun end(fragment: DialogFragment, startView: View?, holder: RecyclerView.ViewHolder) {
beforeTransition(startView, holder)
val doTransition = {
TransitionManager.beginDelayedTransition(holder.itemView as ViewGroup, transitionSet().also {
it.addListener(object : TransitionListenerAdapter() {
override fun onTransitionStart(transition: Transition) {
animating = true
}
override fun onTransitionEnd(transition: Transition) {
if (!animating) return // 这里
animating = false
fragment.dismissAllowingStateLoss()
}
})
})
transition(startView, holder)
}
holder.itemView.post(doTransition)
fragment.lifecycle.addObserver(object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
fragment.lifecycle.removeObserver(this)
animating = false // 这里
holder.itemView.removeCallbacks(doTransition)
TransitionManager.endTransitions(holder.itemView as ViewGroup)
}
})
}
好的,麻烦大佬了
怎么样了,小哥,还有吗
有问题再打开
没有再发现崩溃了
ok
main(1)
java.lang.IllegalStateException
Fragment FullScreenImageViewerDialogFragment{2998a4f} (e029c2a1-c25e-4b63-a883-22f4197f941f) not associated with a fragment manager.
解析原始 1 androidx.fragment.app.Fragment.getParentFragmentManager(Fragment.java:1040) 2 androidx.fragment.app.DialogFragment.dismissInternal(DialogFragment.java:350) 3 androidx.fragment.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:317) 4 com.github.iielse.imageviewer.utils.TransitionEndHelper$end$doTransition$1$1$1.onTransitionEnd(TransitionEndHelper.kt:34) 5 androidx.transition.Transition.end(Transition.java:1952) 6 androidx.transition.TransitionSet$TransitionSetListener.onTransitionEnd(TransitionSet.java:451) 7 androidx.transition.Transition.end(Transition.java:1952) 8 androidx.transition.Transition$3.onAnimationEnd(Transition.java:1901) 9 android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:554) 10 android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1242) 11 android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1484) 12 android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146) 13 android.animation.AnimationHandler.access$100(AnimationHandler.java:37) 14 android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54) 15 android.view.Choreographer$CallbackRecord.run(Choreographer.java:1055) 16 android.view.Choreographer.doCallbacks(Choreographer.java:875) 17 android.view.Choreographer.doFrame(Choreographer.java:772) 18 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042) 19 android.os.Handler.handleCallback(Handler.java:888) 20 android.os.Handler.dispatchMessage(Handler.java:100) 21 android.os.Looper.loop(Looper.java:213) 22 android.app.ActivityThread.main(ActivityThread.java:8178) 23 java.lang.reflect.Method.invoke(Native Method) 24 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 25 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)