Android

[Android] Fragments

은 딩 2023. 1. 2. 11:12

사용법

1. fragments 패키지에 별도로 관리(없다면 생성)

  • Kotlin class로 fragment 생성
    => 이름은 ~~Fragment로 짓자
    => Fragment()를 상속받도록 처리  - androidx에서 제공하는 것으로 자동 완성
  • Fragment 모양(layout)을 xml로 그려주자
    • 이름은 fragment_~~로 짓는 게 일반적

2. xml + 코틀린파일 연결 : 코틀린 클래스에서 onCreateView 함수를 오버라이딩.

  • onCreateView : 어떤 xml을 사용할지 연결하는데만 쓰이는 전용 함수.
  • return 내용을 통으로 교체. (return 문장 전체 삭제)
  • return inflater.inflate(R.layout.xml파일이름, container, false)
package com.eunjeong.fragments.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.eunjeong.fragments.R

// FirstFragment.kt
class FirstFragment : Fragment(){

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_first, container, false)
    }

}

 

3. 프래그먼트에서의 동작 관련 코드들은 => onActivityCreated 를 오버라이딩해서, 그 내부에 작성하자.

  • 유의사항 : mContext / this 등으로 어떤 화면인지 전달해야할 상황(ex. toast)에서는 => context 변수를 대신 대입해서 => 이 프래그먼트를 들고 있는 화면이 전달되도록 처리하자.
package com.eunjeong.fragments.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.eunjeong.fragments.R
import com.eunjeong.fragments.databinding.FragmentFirstBinding

//FirstFragment.kt

class FirstFragment : Fragment(){
    private lateinit var viewBinding: FragmentFirstBinding

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_first, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewBinding.changeTextBtn.setOnClickListener {
            //임시로 -> 문구 바꾸기
            viewBinding.contentTxt.text = "안녕하세요"
        }

    }

}

 

4. 만든 프래그먼트는 일종의 화면 부속품. => 액티비티에 올려줘야 화면에 등장하게 됨

  • 액티비티의 xml상에 직접 올려주기
    => <fragment> 태그 생성 / 크기 결정
    => 어떤 종류의 프래그먼트인지 class 속성으로 자동완성해서 적어주자.
    => tag속성 또는 id속성값을 중복되지 않게 붙여줘야 정상적으로 동작.
  • activity_main.xml Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <fragment
        android:tag="FirstFrag"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        class="com.eunjeong.fragments.fragments.FirstFragment"/>


</LinearLayout>

 

  • 액티비티에 ViewPager를 배치하고 => 그 페이지 내용물로 프래그먼트 배치.
    => 다음 글에 쓸 예정
  1. 특이사항
    • 프래그먼트도 일종의 클래스 이므로 => 한번 만들어두고 여러번 사용해도 괜찮다.
      => 한화면에 같은 프래그먼트가 2회 이상 보여지는것도 가능.

https://github.com/Eundding/android_study/tree/master/Fragments

 

GitHub - Eundding/android_study

Contribute to Eundding/android_study development by creating an account on GitHub.

github.com


참고 : class101+ 코딩티처 지니 강의