与 setnextanim 崩溃?
Crash with setnextanim?
我不断收到 setnextanim 崩溃,但没有追踪到我代码中的确切位置。这是我唯一使用 nextanim 的地方:
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
Animation defaultAnimation = super.onCreateAnimation(transit, enter, nextAnim);
if (defaultAnimation == null && nextAnim != 0) {
defaultAnimation = AnimationUtils.loadAnimation(getActivity(), nextAnim);
}
if (defaultAnimation != null) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
defaultAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_NONE, null);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
return defaultAnimation;
}
这是我能找到的踪迹:
FATAL EXCEPTION: main
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:765)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:700)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
知道我做错了什么可能导致这次崩溃吗?
查看异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.support.v4.app.Fragment.setNextAnim(int)' on a null object
reference
而且堆栈跟踪不包含对您的代码的引用这一事实,我认为可以合理地假设它与您的这部分代码无关。
相反,它可能与某个视图在某个地方是垃圾 collected/nulled 相关,然后稍后尝试使用它,在空对象上调用 show/hide 或类似的。参见 this discussion。
在我的例子中,我从堆栈中删除了一个 null
片段:
val fragment = getSelectedFragment() // null
supportFragmentManager?.beginTransaction()
?.remove(fragment)
?.commit()
对我来说是 fragmentTransaction.hide(fragment)
而我的 fragment
是空的。
希望这对任何人都有帮助。
对我来说是:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(currentFragment);
ft.attach(currentFragment);
ft.commit();
其中 currentFragment 为空。
所以当您尝试使用它时,请确保该片段不为空。
我不断收到 setnextanim 崩溃,但没有追踪到我代码中的确切位置。这是我唯一使用 nextanim 的地方:
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
Animation defaultAnimation = super.onCreateAnimation(transit, enter, nextAnim);
if (defaultAnimation == null && nextAnim != 0) {
defaultAnimation = AnimationUtils.loadAnimation(getActivity(), nextAnim);
}
if (defaultAnimation != null) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
defaultAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_NONE, null);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
return defaultAnimation;
}
这是我能找到的踪迹:
FATAL EXCEPTION: main
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:765)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:700)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
知道我做错了什么可能导致这次崩溃吗?
查看异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
而且堆栈跟踪不包含对您的代码的引用这一事实,我认为可以合理地假设它与您的这部分代码无关。
相反,它可能与某个视图在某个地方是垃圾 collected/nulled 相关,然后稍后尝试使用它,在空对象上调用 show/hide 或类似的。参见 this discussion。
在我的例子中,我从堆栈中删除了一个 null
片段:
val fragment = getSelectedFragment() // null
supportFragmentManager?.beginTransaction()
?.remove(fragment)
?.commit()
对我来说是 fragmentTransaction.hide(fragment)
而我的 fragment
是空的。
希望这对任何人都有帮助。
对我来说是:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(currentFragment);
ft.attach(currentFragment);
ft.commit();
其中 currentFragment 为空。
所以当您尝试使用它时,请确保该片段不为空。