이 글은 이것이 안드로이드다 with 코틀린(개정판)를 참고하여 작성하였습니다.
작성자 : 정현민
개발환경은 Windows, Android Studio입니다.
1. 프래그먼트
What is fragment?
activity보다 가볍게 화면전환을 하기 위한 것
2. 목록에 해당되는 list fragment 만들기
blank fragment 생성>split에서 constraintlayout> Textview에서 string/title_list 작성
fragment tag를 끌고와 목록 중 선택
✔화면 안에 하나만 넣을 땐 fragment tag를 사용
✔그렇지 않은 경우, framelayout 사용
val binding by lazy {ActivityMainBinding.inflate(layoutInflater)}
-binding을 만들어주는 code
fun seFragment(){
// 1. 사용할 프래그먼트 생성
val listFragment = ListFragment()
//2. 트랜젝션 생성
val transaction = supportFragmentManager.beginTransaction()
//3. 트랜잭션을 통해 프래그먼트 삽입
transaction.add(R.id.framelayout, ListFragment())
transaction.commit()
3. 상세페이지에 해당되는 detail fragment 만들기
*list fragment와 동일한 layout 설정
//MainActivity
fun goDetail(){
val detailFragment = Detailfragment()
val transaction = supportFragmentManager.beginTransaction()
transaction.add(R.id.frameLayout, detailFragment)
//뒤로가기 기능 구현(프래그먼트 동작이 stack에 담김)
transaction.addToBackStack("detail")
transaction.commit()
}
fun goBack(){
onBackpressed()
}
✔list fragment의 next button에서는 goDetail 함수 출력하는 코드
✔detail fragment에서는 back button을 눌렀을 때, MainActivitiy의 goBack 호출
//ListFragment
override fun onAttach(context: Context) {
super.onAttach(context)
if(context is MainActivity)mainActivity=context
-MainActivity를 꺼내서 담아놓음으로써 MainActivity에서 함수가 제대로 작동할 수 있도록 연결해주는 코드
binding = FragmentlistBinding.inflate(inflater, container, false)
return binding.root
-binding해주는 코드
override fun onViewCreated(view: View, savedinstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btnNext.setOnClicklistener {
mainActivity.goDetail()
}
}
-클릭하면 MainActivity에서 goDetail함수를 불러오는 코드
4. 프래그먼트끼리 값 주고받기
1) viewBinding부터 설정
:build gradle>buildFeatures 아래에 viewBinding true
2) TextView 생성
ReceiverFragment에는 '리시버', SenderFragment에는 button 두 개 생성> constraintlayout 설정
3) ReceiverFragment 코드
Ctrl+O> onViewCreated method
override fun onViewCreated(view: view, savedInstanceState: Bundle?) {
super.onviewCreated(view, savedInstanceState)
setFragmentResultlistener(requesKey: "request"){key, bundle ->
//수신 준비 완료
bundle.getString(key: "senderKey")?.let{it:String
binding.textView.text = it
}
}
4) SenderFragment 코드
override fun onViewCreated(view: view, savedInstanceState: Bundle?) {
super.onviewCreated(view, savedInstanceState)
with(binding){this:FragmentSenderBinding
btnYes.setOnClickListener {it:View!
//btnYes는 YES button 생성 시 지은 이름
val bundle = bundleOf(...pairs:"sendereKey" to "Yes"
//어떤 key에 어떤 값으로 bundle을 담겠다는 의미
setFragmentResult(requestKey: "request", bundle)
}
btnNo.setOnClickListener {it:View!
//btnNo는 NO button 생성 시 지은 이름
val bundle = bundleOf(...pairs:"sendereKey" to "No"
setFragmentResult(requestKey: "request", bundle)
}
}
}
▶Fragment to Fragment로 값을 보낼 때는 setFragmentResult와 setFragmentResultlistener로 쉽게 값을 전달 가능!!
'GDSC HUFS 3기 > Android with Kotlin Team 4' 카테고리의 다른 글
[4팀] 14-9. 화면 구성하기:탭메뉴 뷰페이저와 프래그먼트 (0) | 2021.11.16 |
---|---|
[4팀] 14-7,8. 화면 구성하기:커스텀뷰, 커스텀위젯 (0) | 2021.11.13 |
[4팀]14-4. 화면 구성하기:리사이클러뷰 (0) | 2021.11.08 |
[4팀]14-2~3. 화면구성하기:스피너 (0) | 2021.11.08 |
[4팀]14-1. 화면 구성하기:액티비티 값 주고받기, 뷰바인딩 (0) | 2021.11.08 |