본문 바로가기
Android Studio/Kotlin

Fragment에서 Activity로 화면전환

by ksb0511 2020. 3. 1.

화면전환이라고 생각하면 보통 ..

val intent = Intent(this, MainActivity::class.java)
startActivity(intent)

형태의 Intent 사용을 생각한다. Activiy에서 Intent 사용 형식은 위의 형식과 같다.

인텐트에 대해 간단히 얘기하자면, Android에 4대 컴포넌트가 있는데, Activity, BroadCast Receiver, Service, Contents Provider 가 있다. 이 네 개는 독립적으로 역할을 수행하는 것들인데, 이 컴포넌트들 사이에서 데이터를 주고받으려고 하기 위해 사용되는 것이 "Intent"라고 할 수 있다.

 

그러나 Fragment는 다르다.

일단 Fragment의 생명주기를 보면..

Fragment lifecycle

이런 형태로 생명주기가 구성되어 있다.

Fragment에서 Intent가 쓰이는 것을 설명하기 앞서 Activity의 onCreate()메소드에 대해서 간단히 알아보자면..!

 

Activity lifecycle

Activity에서 화면을 만들어내는 ( 구성하는 ) 메소드는 onCreate() 메소드다.

참고로 이 메소드들을 사용할 때에는

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
}

이런 형태로 override를 쓰고 함수를 생성해내는데 ...생명주기에 있는 메소드들을 선언할 시 override를 쓰는 이유는 함수를 재정의하는 것이기 때문이다.

 그리고 버튼을 클릭했을 시 화면이 전환되게끔 만들고싶다면 보통 화면이 생성될 때에 이벤트를 같이 생성해 준다.

 ex) Activity에서는 onCreate() 메소드에서 작성 / Fragment에서는 onCreateView에서 작성한다.

 

본론으로 돌아와서 Fragment에 대해 말하자면

 Fragment는 재사용 가능한 부분 Activity의 개념이라고 할 수 있다. Fragment는 항상 Activity 위에 올라가 있어야 된다. 또한 Activity가 자신의 자체 생명주기를 갖듯이 Fragment 또한 자체 생명주기를 지니고 있다.

일단 Fragment에서 this 라는 객체는 사용이 불가능하다. 하지만 우리가 흔히 아는 Intent를 사용할 때에는 해당 Context를 가리키는 this가 필요하다. Fragment에서는 this 대신 getActivity()를 사용하면 현재 Context를 받아올 수가 있다.

val intent = Intent(getActivity(), MainActivity::class.java)
startActivity(intent)

이러한 형태로 사용하면 Fragment에서 Activity로 쉽게 화면 전환을 시킬 수가 있다.

 

Fragment의 생명주기와 연관지어 부가설명을 하자면 아까 Activity에서는 onCreate() 메소드에 작성하는데 Fragment에도 onCreate()가 있는데 왜 onCreateView에다가 Intent를 써야하는 지 의문이 들었다.

Fragment에서 onCreate()는 초기화 리소스들이 들어가는 곳이다. 그리고 onCreateView()에서 Layout을 inflate한다. inflate의 뜻은

부풀리다인데 레이아웃 파일을 메모리로 올린다거나, xml을 객체로 담아주는 거라고 생각하면 편하다.( ex - RecyclerView의 Adapter에서도 쓰임)

즉, onCreateView에서는 View 객체를 얻어서 초기화한다고 볼 수 있다.

 

Fragment에서는 Fragment를 구성하는 레이아웃을 사용할 수 있는 시기가 onViewCreated 이후부터 이므로 onCreateView()에서 뷰 객체에 접근한다고 알아두면 된다.

 

참고로 뒷부분인 onActivityCreated()는 Fragment 생성 이후 호출하는 함수이다. onCreate 이벤트를 완료한 뒤에 나타난다.

댓글