프래그먼트 다루기

고성욱·2023년 3월 22일
0

안드로이드

목록 보기
23/26

안드로이드에서 프래그먼트(Fragment)란 액티비티(Activity) 내에서 화면 UI 일부를 나타내는 작은 조각입니다. 프래그먼트는 액티비티와 비슷한 생명주기를 가지며, 액티비티 내에서 여러 개의 프래그먼트를 조합하여 화면을 구성할 수 있습니다.

  • 프래그먼트는 서로 다른 크기의 화면을 가진 기기에서 하나의 액티비티로 서로 다른 레이아웃을 구성할 수 있도록 설계되었습니다.
  • 목록 프래그먼트와 상세 프래그먼트가 있을 때 태블릿 같은 큰화면에서는 두 프래그먼트를 한 화면에 표시하고 스마트폰 처럼 작은 화면에서는 먼저 목록 프래그먼트만 표시한 후에 목록을 클릭 하면 상세 가 나타나는 구조 입니다.
  • 뷰가 하나만 필요 할 때는 프래그먼트를 사용하지 않습니다.

프래그먼트 생명주기

프래그먼트의 생명주기는 다음과 같습니다.

  1. onAttach() : 프래그먼트가 액티비티에 붙을 때 호출됩니다.
  2. onCreate() : 프래그먼트가 생성될 때 호출됩니다.
  3. onCreateView() : 프래그먼트의 UI를 그리기 위해 호출됩니다.
  4. onActivityCreated() : 프래그먼트가 액티비티와 연결되었을 때 호출됩니다.
  5. onStart() : 프래그먼트가 화면에 표시될 때 호출됩니다.
  6. onResume() : 프래그먼트가 화면에 표시된 후 호출됩니다.
  7. onPause() : 프래그먼트가 일시적으로 화면에서 사라질 때 호출됩니다.
  8. onStop() : 프래그먼트가 화면에서 완전히 사라질 때 호출됩니다.
  9. onDestroyView() : 프래그먼트의 UI가 제거될 때 호출됩니다.
  10. onDestroy() : 프래그먼트가 제거될 때 호출됩니다.
  11. onDetach() : 프래그먼트가 액티비티에서 분리될 때 호출됩니다.

결론

프래그먼트는 안드로이드에서 화면을 구성하는 중요한 요소 중 하나입니다. 액티비티와 비슷한 생명주기를 가지며, 액티비티 내에서 여러 개의 프래그먼트를 조합하여 다양한 UI를 구성할 수 있습니다.

프래그먼트 만들기

  • onCreateView() 메서드는 리사이클러뷰의 onCreateViewHolder() 메서드 처럼 동작합니다.
    → 액티비티가 프래그먼트를 요청하면 onCreateView() 메서드를 통해 뷰를 만들어 보여줍니다.
  • inflate() 메서드는 리사이클러뷰 처럼 동일하게 동작합니다.
  • BlankFragment를 생성하고 아래와 같이 코드를 작성 합니다.
class ListFragment : Fragment() {
    
    

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_list, container, false)
    }

}
  • inflater: 레이아웃 파일을 로드하기위한 인플레이터를 기본으로 제공합니다.
  • container: 프래그먼트 레이아웃이 배치되는 부모 레이아웃(액티비티 레이아웃 입니다)
  • savedInstanceState: 상태값을 저장하기 위한 보조 도구, 액티비티의 onCreate와 동일하게 동작합니다.

프래그먼트에서 액티비티의 레이아웃을 inflate 하기 위해서는 onCreateView() 메서드에서 LayoutInflater를 사용합니다. 액티비티와 연결된 레이아웃을 inflate 하려면 container 매개변수에 액티비티의 레이아웃을 전달하면 됩니다.

또한, 프래그먼트에서 버튼과 텍스트뷰를 사용하기 위해서는 inflate된 레이아웃의 View 객체를 먼저 가져와야 합니다. 이후 findViewById()를 사용하여 버튼과 텍스트뷰를 찾아와서 사용할 수 있습니다.

아래는 액티비티와 연결된 레이아웃에 텍스트뷰와 버튼을 띄우는 샘플 코드입니다.

class ExampleFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_example, container, false)

        // TextView와 Button을 찾아온다
        val textView = view.findViewById<TextView>(R.id.textview)
        val button = view.findViewById<Button>(R.id.button)

        // Button 클릭 시 TextView에 텍스트를 추가한다
        button.setOnClickListener {
            textView.text = "버튼이 클릭되었습니다."
        }

        return view
    }
}

위 코드에서 R.layout.fragment_example은 액티비티와 연결된 레이아웃 파일의 이름입니다. 이를 적절하게 수정해야 합니다.

profile
안드로이드, 파이썬 개발자

0개의 댓글