본문 바로가기

Programming/Android

[Android] Lollipop 버전에서 Support Fragment 화면 갱신이 안될때(ListView, Button 등)

요즘 안드로이드 개발 추세는 Activity 위에 Fragment를 올리는 형태를 많이 취한다.


그리고 많은 단말기를 지원하기 위해 Support Activity, Support Fragment를 사용한다.



Activity는 FragmentController 역할을, Fragment는 뷰를 제어한다.


나도 위와 같은 형태로 안드로이드 앱 개발을 진행하는데, 가끔 생각지 못한 버그를 접하게 된다.


최근 개발 중에 Fragment의 화면이 갱신이 되지 않는  버그를 접했다.


플래그먼트에 리스트뷰, 그리고 토글 버튼들을 배치 하였는데, 


이벤트는 발생을 하나, 화면이 새로 그려지지 않았다.


문제는 FragmentManager를 통해 다른 플래그먼트를 불러오는데,


애니메이션을 적용하게 되면, 새로 불려진 플래그먼트 화면이 갱신이 되지 않았다.


모든 단말기에서 발생하는 문제는 아니고, 특정단말기(롤리팝)에서만 발생하는 이슈였는데 동작하지 않는 이유에 대해 찾기가 쉽지 않았다.



/*
 * 문제의 코드
 */ 
getFragmentManager().beginTransaction()
                .setTransition(FragmentTransaction.
                        TRANSIT_FRAGMENT_FADE)
                .addToBackStack("test")
                .replace(R.id.layout_content, new TestFragment()).commit();


위 코드의 문제점은 setTransition 메소드를 사용하여 플래그먼트가 전환될 때 애니메니션을 적용시켰다는 점이다.


좀 예쁘게 만들려고 적용시켰더니....


그래서 setTransition코드를 제거하고 빌드하니 정상적으로 동작하는 것을 확인할 수 있었다..


/*
 * setTransition 주석 처리..
 */ 
getFragmentManager().beginTransaction()
//                .setTransition(FragmentTransaction.
//                        TRANSIT_FRAGMENT_FADE)
                .addToBackStack("test")
                .replace(R.id.layout_content, new TestFragment()).commit();


Support Library를 사용하여 개발하게 되면 보다 편리하게 구현할 수 있지만


가끔 이런 난감한 문제에 봉착할때가 있다는 사실을 다시금 깨닫게 해주는 이슈였다.