본문 바로가기

나의 플랫폼/안드로이드

[Android] android.support.v4.app.fragment.getallowreturntransitionoverlap

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안드로이드 L 버전부터 Materail Design으로 표현할 수 있는 애니메이션이 많습니다. 


Fragment로 이동할 때, View마다 연결을 해서 애니메이션 효과를 줄 수 있는데요.


( 아래 블로그 내용 참고 : )


제가 Tab과 ViewPager로 이동 하면서 아래와 같은 Exception이 발생 했습니다.


java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v4.app.Fragment.getAllowEnterTransitionOverlap()' on a null object reference

  at android.support.v4.app.BackStackRecord.configureTransitions(BackStackRecord.java:1201)

  at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1032)

  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:661)

  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)

  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)

  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)

  at android.support.v4.view.ViewPager.populate(ViewPager.java:1105)

  at android.support.v4.view.ViewPager.populate(ViewPager.java:951)

  at android.support.v4.view.ViewPager$3.run(ViewPager.java:250)

  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)

  at android.view.Choreographer.doCallbacks(Choreographer.java:580)

  at android.view.Choreographer.doFrame(Choreographer.java:549)

  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)

  at android.os.Handler.handleCallback(Handler.java:739)

  at android.os.Handler.dispatchMessage(Handler.java:95)

  at android.os.Looper.loop(Looper.java:135)

  at android.app.ActivityThread.main(ActivityThread.java:5254)

  at java.lang.reflect.Method.invoke(Native Method)

  at java.lang.reflect.Method.invoke(Method.java:372)

  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)


열심히 구글링을 해봤지만, 좋은 해결책이 나오지 않더라구요.

결국 열심히 반나절 동안 테스트를 해본 결과 


SomethingFragment fragment = SomethingFragment.newInstance();
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
fragment.setSharedElementEnterTransition(new DetailsTransition());
fragment.setEnterTransition(new Fade());
// setExitTransition(new Fade());
// fragment.setSharedElementReturnTransition(new DetailsTransition());

ft.addSharedElement(view, "tagImage");
ft.replace(R.id.container, fragment);
ft.addToBackStack(null);
ft.commit();

}

위와 같이 setExitTransition과 setSharedElementReturnTransition을 주석 처리하니 문제 없이 동작이 됩니다.

아직 버전업 단계라 버그일 수 있을 듯 하지만, 혹시 보안책으로 수정하고 계시는 분들은

참고하셔도 좋을듯 합니다.



## 이블로그는 어디까지는 찾았던 부분을 잊지 않기 위해 올려놓은 것 입니다.

    내용이 부실해도 이해해 주시길 바랍니다.