반응형
Fragment
- 여러 화면을 가지고 있는 앱 = 여러 Activity를 갖는 앱 (화면 여러개 = 액티비티 여러개)
- Activity는 독립된 실행단위 -> 실행단위 유지 위한 다양한 기능 보유, 메모리 소모 큼 => 독립된 실행단위가 아닌 그냥 화면만 필요한 경우라면 Fragment 사용이 효율적
- Activity 내의 작은 화면 조각으로서 Activity 화면을 여러 영역으로 나누어 관리
- 두개의 서로 다른 액티비티에 같은 화면이 필요할 경우 fragment를 재사용해 관리하면 좋음
Frgament 프로퍼티
- add : 지정된 레이아웃 안에 Fragment 추가 -> 액티비티 안에서 어디에 어떤 프래그먼트를 배치할지 설정
- replace : 지정된 레이아웃에 설정되어 있는 Fragment 제거하고 새로운 Fragment 추가
[MainActivity.kt]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) // 뷰바인딩 객체
val view = binding.root //뷰바인딩을 통해 레이아웃과 뷰가 결합 -> .root 를 통해 View 객체만를 뽑아내는(?)
setContentView(view)
val frag1 = FirstFragment() // 프래그먼트 객체 생성
val frag2 = SecondFragment()
binding.button.setOnClickListener {
// 프래그먼트 작업 시작
val tran = supportFragmentManager.beginTransaction()
// 프래그먼트를 세팅
//tran.add(R.id.container1, frag1) //어디에 프래그먼트를 배치할지를 세팅 //액티비티가 관리하고 있는 화면에 레이아웃을 지정 // 추가했는데 똑같이 또 추가하면 에러남
tran.replace(R.id.container1, frag1)
tran.commit() //액티비티의 레이아웃 container1 에 프래그먼트 배치됨
}
binding.button2.setOnClickListener {
val tran = supportFragmentManager.beginTransaction()
// tran.add(R.id.container1, frag2) // 이렇게 설정해주면 frag1 위에 겹쳐져서 올라감
tran.replace(R.id.container1, frag2) // 따라서 replace를 통해 왔다갔다 해주는게 나음음
tran.commit()
}
}
✔️ supportFragmentManager는 프래그먼트를 추가/교체/제거 등의 관리를 해주는 매니저 역할
[FirstFragment.kt / SecondFragment.kt]
class FirstFragment : Fragment() {
// 여기에서 만든 View를 Fragment의 View로 사용 // 프래그먼트가 다 보여줄 준비가 되면 이 메서드가 자동으로 호출됨
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_first,null)
return view
}
}
AddToBackStack
- 안드로이드에서 Back Button은 현재 Activity의 종료를 의미
- Fragment는 액티비티가 아니므로 Back Stack 에 들어가지 않고, Back Button으로 제거 X ,But, AddToBackStack 메서드를 통해 Back Stack에 포함된 경우에는 Back Button으로 제거 가능 => 이를 화면에 이전 화면으로 돌아간듯한 효과 줄 수 있음
binding.button.setOnClickListener {
// 프래그먼트 작업 시작
val tran = supportFragmentManager.beginTransaction()
// 프래그먼트를 세팅
//tran.add(R.id.container1, frag1)
tran.replace(R.id.container1, frag1)
tran.addToBackStack("frag1") //back stack 내에서 구분용 문자열
tran.commit()
}
binding.button2.setOnClickListener {
val tran = supportFragmentManager.beginTransaction()
// tran.add(R.id.container1, frag2) // 이렇게 설정해주면 frag1 위에 겹쳐져서 올라감
tran.replace(R.id.container1, frag2) // 따라서 replace를 통해 왔다갔다 해주는게 나음
tran.addToBackStack("frag2")
tran.commit()
}
반응형
'Android' 카테고리의 다른 글
[안드로이드/Fragment] Fragment 내 View 제어 (0) | 2023.04.21 |
---|---|
[안드로이드/Fragment] Fragment 생명주기 (1) | 2023.04.21 |
[안드로이드/Service] IPC 란? (0) | 2023.04.20 |
[안드로이드/Service] Service(서비스) 란? (0) | 2023.04.20 |
[안드로이드/Recevier] 시스템 메시지 (System Message) (0) | 2023.04.19 |