사용법
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를 배치하고 => 그 페이지 내용물로 프래그먼트 배치.
=> 다음 글에 쓸 예정
- 특이사항
- 프래그먼트도 일종의 클래스 이므로 => 한번 만들어두고 여러번 사용해도 괜찮다.
=> 한화면에 같은 프래그먼트가 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+ 코딩티처 지니 강의
'Android' 카테고리의 다른 글
[Android] TextView background를 Xml로 지정 (0) | 2023.01.02 |
---|---|
[Android] TabLayout text color, indicator color 변경 (2) | 2023.01.02 |
[Android] TabLayout - Viewpager 연계 라이브러리 (0) | 2023.01.02 |
[Android] ViewPager (0) | 2023.01.02 |
[Android] SharedPreferences 데이터 항목 반영구 저장 (0) | 2023.01.02 |