태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

프래그먼트(Fragment)를 사용하면 에러가 나요!

2012.02.04 00:07

안드로이드 3.0부터 소개되었던 프래그먼트(Fragment)는 기존의 액티비티+레이아웃 혹은 뷰+레이아웃을 사용하는 화면 구성 방식에 비해 훨씬 유연하며, 좀 더 체계적으로 화면을 관리할 수 있도록 합니다.

그런데, 아직 프래그먼트가 소개된지 얼마 되지 않아, 이를 올바르게 구현하지 않아 오류가 발생하는 경우가 잦습니다. 이 글에서는 그 중 대표적인 오류에 대해 다뤄보려 합니다.

이 문제는 런타임시 발생하는 오류로, 일반적으로 개발 중 테스트시에는 잘 보이지 않다가 실제 사용자들이 애플리케이션을 사용할 때 주로 발생합니다. 오류 발생시 나타나는 오류 메시지는 다음과 같습니다.

java.lang.RuntimeException: Unable to start activity ComponentInfo{액티비티명}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment [프래그먼트명]: make sure class name exists, is public, and has an empty constructor that is public

 
이 문제는 구현한 프래그먼트에 기본 생성자가 구현되어 있지 않아 발생하는 문제입니다. 이와 관련된 사항은 개발자 문서의 Fragment 설명에 나와있는 부분이기는 한데, 사실 눈에 잘 띄지 않아 빼먹기 쉽더군요.. ㅠㅠ 관련 내용은 다음과 같습니다.

All subclasses of Fragment must include a public empty constructor. The framework will often re-instantiate a fragment class when needed, in particular during state restore, and needs to be able to find this constructor to instantiate it. If the empty constructor is not available, a runtime exception will occur in some cases during state restore.

 
 예를 들어, MyFragment라는 프래그먼트를 구현하면서 MyFragment(String name)과 같은 생성자만 구현하고, MyFragment() 생성자를 구현하지 않아 발생하는 문제입니다.

구현에 따라 적절히 MyFragment()와 같은 기본 생성자를 구현하면 위의 오류에서 벗어날 수 있습니다. :)
저작자 표시 비영리 변경 금지
신고

커니 안드로이드 개발 팁/일반 , , , , , , , ,

  1. Blog Icon
    ksj

    감사합니다! 정말 많은 도움이 되었어요 ㅠㅠ!!!!!

  2. public으로 만들어 줘야 하네요 ㅎㅎ
    고맙습니다~

  3. Blog Icon
    진열

    감사합니다.ㅠㅠ

  4. Blog Icon
    hya

    와 정말 감사합니다 ㅠㅠ 진짜 이거 아니였으면 못했어요..

  5. Blog Icon
    혀니

    와 진짜 이거때문에 해결했어요 ㅜㅜ

    final로 잘못쓰고있어서 public으로 바꾸니 바로 되네요 감사합니다~

  6. Blog Icon
    델몬트사과

    정말 감사합니다.
    완전 고생하고있었어요 덕분에 쉽게 해결한듯 합니다.
    간헐적인 런타임오류라 완전 갑갑했었는데

  7. Blog Icon
    mano

    안드로이드스튜디오 blank activity with fragment 으로 프래그먼트를 만드는데 자바소스가 2개나오고 add commit 이것이랑 프라이스홀프래그먼트? 이것도 없네요 무슨 방법없나요??