KUIT-앱 개발 프로젝트 동아리

3주차 실습-Fragment

농농씨 2023. 10. 1. 17:50

저희 안드로이드의 커리큘럼을 크게 4가지의 챕터로 구분했을 때, 1~3주차의 내용이 첫번째 챕터입니다! 따라서 이번주차까지의 내용을 잘 정리하시고 넘어가는 걸 추천드립니다! 다음 4주차는 안드로이드의 첫번째 좌절관문인 RecyclerView가 준비되어 있으니 이번 주차 스터디를 빠르게 완료하시고 마음의 준비를 하시면 좋겠습니다~

다들 화이팅하세요!

 

dp 개념을 알아야 여러 화면에 깨짐없이 레이아웃을 적용할수 있음

ConstraintLayout 활용

하드웨어를 360*800 mdpi 가 범용적임

실습시작!

 

Fragment 만드는법: 소스파일 있는 디렉터리 우클릭-New-Fragment-Fragment(Blank)

프래그먼트는 매니페스트에 등록되지 않아서 context를 가지지 않는다

이대로 프래그먼트 3개 만들어줌

 

뷰바인딩도 적용해봅시다

그래들에 뷰바인딩 선언해주고 Sync 하고

 

프래그먼트에 뷰바인딩 적용하는 법?

일단 프래그먼트들 이렇게 설정해주고 third fragment는 second와 똑같이.

 

그다음 메인액티비티 이렇게 해주고

 

각 프래그먼트에 배경색 설정해주고 실행하면

 

하려는건 오른쪽 프래그먼트 클릭하면 third fragment로 바뀌고 다시 클릭하면 secondfragment로 바뀌게 하는거.

 

프래그먼트는 자체적으로 이벤트를 처리할 수 있단 것을 기억하면서... 시작!

 

secondfragment 의 텍스트뷰에 아이디 tv_second라고 설정해주고

thirdfragment에도 똑같이 넣어준다

 

클릭하면 색 잘 바뀜

(avd를 바꿔야하나 고민중... 근데 어차피 다양한 기기에서 작동하도록 하는 게 목적 아닌가?

 

 

lifeCycle을 로그로 확인해보자

각 생명주기 함수를 모두 넣어주고 각 Fragment 파일에 복붙해준다.

* Ctrl+R로 텍스트를 일괄적으로 변경할 수 있다.

** 자동 줄 정렬은 Ctrl+Alt+L

 

처음 실행하면

<First> onAttach-onCreate-onCreateView-onViewStateRestored

<Second> onAttach-onCreate-onCreateView-onViewStateRestored

<First> onStart

<Second> onStart

<First> onResume

<Second> onResume

이후에 SecondFragment 클릭하면

<First> onStart

<Second> onPause-onStop

<Third> onAttach-onCreate-onCreateView-onViewStateRestored-onStart

<Second> onDestroyView-onDestroy-onDetach-onResume

다시 ThirdFragment 클릭하면

<First> onStart부터

위의 과정을 Second와 Third만 바뀐 채로 똑같이 반복한다.

 

백스택에도 저장안됨

백스택에 저장하려면 beginTransaction().addToBackStack.replace() 어쩌구 써야 함. 추가공부

 

이제 데이터전달을 해보자

second나 third에서 뭐 하면 first Fragment로 전달되게끔 해보겠다.

SecondFragment의 액티비티 파일에

onCreateView 의 setOnClickListener 함수에 위와 같이 parentFragmentManager를 이용해서 arguments라는 속성에 Bundle 데이터를 넣어준다

그리고 나서 FirstFragment의 onStart함수를 호출한다.

ThirdFragment에도 데이터만 수정해서 똑같이 넣어준다

 

 

그리고 데이터를 전달받고 나서 호출될 FirstFragment의 onStart 함수에서

firstFragment의 xml 파일의 텍스트뷰의 아이디(tvChange)를 가져와서 arguments의 데이터를 넣어준다.

 

실행해보면 

왼쪽 하단에, 전달된 데이터가 잘 출력되는 것을 확인할 수 있다.