본문 바로가기
안드로이드/Fragment

안드로이드 Fragment 생명주기

by 김어찐 2022. 6. 17.
728x90

Fragment 도 생명 주기를 가지고 있다.
각 생명 주기에 자동으로 호출되는 메서드가 제공되며 이 메서드를 통해 필요한 처리를 할 수 있다.

 

 

package com.example.fragmentlifecycle

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

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

        val frag = SubFragment()

        button.setOnClickListener {
            val tran = supportFragmentManager.beginTransaction()
            tran.replace(R.id.container1,frag)
            // backstack에 넣어주면 fragment 제거시 onStop까지만 실행, 소멸되지 않음
            tran.addToBackStack(null)
            tran.commit()
        }

        button2.setOnClickListener {
            val tran = supportFragmentManager.beginTransaction()
            tran.remove(frag)
            tran.commit()
        }
    }
}

 

Fragment

package com.example.fragmentlifecycle

import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

class SubFragment : Fragment() {
    // fragment가 Activity와 연결이 되면 호출
    override fun onAttach(context: Context) {
        super.onAttach(context)
        Log.d("test","onAttach")
    }

    // fragment가 생성될 때
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("test","onCreate")
    }

    // fragment를 통해 보여줄 View를 생성하기 위해 호출
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        Log.d("test","onCreateView")
        val view = inflater.inflate(R.layout.fragment_sub,null)
        return view
    }

    //fragment를 통해 보여줄 View가 생성되면 호출
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        Log.d("test","onViewCreated")
    }

    // 액티비에서 보여줄 프래그먼트가 완전히 생성되면 호출된다.
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        Log.d("test","onActivityCreate")
    }

    // fragment가 가동될 때 호출(fragment가 화면에 표시될 때)
    override fun onStart() {
        super.onStart()
        Log.d("test","onStart")
    }

    // fragment가 보여지고 나서 호출된다
    override fun onResume() {
        super.onResume()
        Log.d("test","onResume")
    }

    //fragment가 일시 정지될때 호출(fragment가 화면세서 사라질 때)
    override fun onPause() {
        super.onPause()
        Log.d("test","onPause")
    }

    // fragment가 화면에서 완전히 사라져서 더 이상 보여지지 않을 때 호출
    // fragment 정지
    override fun onStop() {
        super.onStop()
        Log.d("test","onStop")
    }

    // fragment가 제거될 떄 호출된다
    override fun onDestroy() {
        super.onDestroy()
        Log.d("test","onDestroy")
    }

    // fragment가 액티비와 연결이 완전히 끊기기 전에 호출된다.
    override fun onDetach() {
        super.onDetach()
        Log.d("test","onDetach")
    }
}
728x90

'안드로이드 > Fragment' 카테고리의 다른 글

안드로이드 DialogFragment  (0) 2022.06.17
안드로이드 ListFragment  (0) 2022.06.17
안드로이드 Activity Controller  (0) 2022.06.17
안드로이드 Fragment 내의 View 제어  (0) 2022.06.17
안드로이드 Fragement  (0) 2022.06.17