안드로이드 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을 주석 처리하니 문제 없이 동작이 됩니다.
아직 버전업 단계라 버그일 수 있을 듯 하지만, 혹시 보안책으로 수정하고 계시는 분들은
참고하셔도 좋을듯 합니다.
## 이블로그는 어디까지는 찾았던 부분을 잊지 않기 위해 올려놓은 것 입니다.
내용이 부실해도 이해해 주시길 바랍니다.
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] getBaseContext, getApplicationContext 설명 (1) | 2015.11.11 |
---|---|
[Android] OnGlobalLayoutListener: deprecation and compatibility (0) | 2015.11.10 |
[Anroid] 라운딩된 ImageView 만들기 (2) | 2015.11.09 |
[Android] 특정 Layout 위치에 Fragment를 변환 (0) | 2015.11.06 |
[Android] xml 소스 폴더 관리 (0) | 2015.11.04 |