본문 바로가기

Android

Kotlin 이슈 6 fragment lifecycle

반응형

지난 이야기

2020/02/01 - [Android + Kotlin + Figma] - Kotlin 이슈 5 include 대신 정적 fragment, Unresolved reference.

 

Kotlin 이슈 5 include 대신 정적 fragment, Unresolved reference.

지난 이야기 저번 시간에는 크롤링 코드를 작성했습니다. 모든 코드를 MainActivity.kt에 집어넣으려니 상당히 난잡해보이더라고요. 2020/01/22 - [Android + Kotlin + Figma] - doAsync, AsyncTask, Coroutines..

roomedia.tistory.com

지난 번에 크롤링 코드를 fragment를 상속받아 별도의 클래스로 구현하는 작업을 했었습니다. 오늘은 이 작업을 하던 중 실수했던 부분에 대해 알아보겠습니다.

TL; DR

  1. view!! 값은 onCreateView() 이후 설정된다.
  2. 고로 이를 사용하는 함수는 onCreateView() 이후 호출해야 한다.

앱이 이유 없이 꺼진다?~?!!

코드를 아래처럼 작성했을 때, 앱이 이유 없이 꺼졌었습니다. 에러도 뜨지 않아 약간 고생했었는데요. 여러분들은 뭐가 문제인지 아시겠나요??

class CrawlLottoFragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
                view!!
        return inflater.inflate(R.layout.content_lotto_round, container, false)
    }
}

바로 view가 생성되기 이전에 view에 접근해서인데요! 이게 저렇게 이어진 코드로 볼 때는 이상한 점을 바로 알 수 있지만 함수에 감싸이는 순간!! 점점 헷갈려옵니다...

class CrawlLottoFragment : Fragment() {
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        super.onCreateView(inflater, container, savedInstanceState)
        initCrawl()
        getRound()
        return inflater.inflate(R.layout.content_lotto_round, container, false)
    }
}

그래서 어느 시점에서 무엇을 호출할 수 있는지 lifecycle을 아는 게 중요합니다. 안드로이드 공식 홈페이지에서는 이 fragment의 lifecycle에 대해 자세히 설명하고 있는데요.

 

프래그먼트  |  Android 개발자  |  Android Developers

A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section…

developer.android.com

fragment도 결국 activity의 일종인지라, activity의 메소드를 사용하는 모습을 볼 수 있습니다. fragment는 여기에 몇 개의 메소드가 추가되었는데요. 이 중 onCreateView()는 시스템이 최초로 UI를 그릴 때 호출되며, UI가 존재하는 경우 반드시 View를 반환해야 합니다.

다음 시간에는 fragment를 동적으로 사용하는 방법과 ViewPager에 대해 알아보겠습니다.

반응형