Fragment
UI 구성을 모듈 단위로 나누어 독립성을 추가해주고, 한 화면에 있던 UI 들을 조각이라는 단위로 재배치 하는 것
오늘 해볼 실습은 하나의 Activity안에서 Fragment가 어떻게 변환되는지를 파악하는 것이다.
위 그림과 같이 홈프래그먼트에서 앨범프래그먼트로 이동하는 것을 구현해보자.
먼저 프래그먼트 클래스를 만들어보면 액티비티클래스하고 다음과 같은 차이점이 있다.
class HomeFragment : Fragment()
액티비티는 AppCompatActivity 를 상속받았지만
프래그먼트는 Fragment 를 상속받는다.
Binding을 선언해주는 것에도 차이가 있다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) //바인딩 초기화
setContentView(binding.root)
먼저 액티비티에서는 위와 같이 선언해주지만
lateinit var binding: FragmentHomeBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentHomeBinding.inflate(inflater, container, false)
//as mainActivity 홈프래그먼트는 메인엑티비티 안에있는 하나의 조각
return binding.root
}
프래그먼트에서는 위와 같이 선언해준다.
먼저 binding : xml뷰의 카멜케이스 로 선언해주는 것은 같지만
프래그먼트는 binding을 초기화 해줄 때 inflate(inflater, container, false)를 하고,
setContentView(binding.root)대신에 binding.root를 반환해준다.
바인딩을 초기화 하는 방법을 알아봤으니 이제 프래그먼트 이동을 살펴보자.
홈프래그먼트에서 앨범을 클릭하였을 때 앨범프래그먼트로 이동하는 코드이다.
binding.homeAlbumImgIv1.setOnClickListener {
(context as MainActivity).supportFragmentManager.beginTransaction()
.replace(R.id.main_frm , AlbumFragment()) //메인프레임부분을 앨범프래그먼트로 바꾸겠다.
.commitAllowingStateLoss() //내부적으로 동작하는 부분
}
앨범이미지를 클릭했을 때 실행되는 함수이다.
모든 프래그먼트는 MainActivity에서 실행되고 MainFrame안에서 계속 바뀌는 형태라 as MainActivity를 적어주고
.replace(어디에 속해있는지, 어디로이동할지) 를 적어주었다.
우리는 메인프레임안에 있는 홈프래그먼트를 앨범프래그먼트로 전환해줄 것이기에
main_frm, AlbumFragment를 적어주었다.
반대로 앨범프래그먼트에서도 마찬가지로 다음과 같이 적어주어 뒤로가기 버튼을 클릭했을 때 홈프래그먼트로 전환해주었다.
binding.albumBackIv.setOnClickListener {
(context as MainActivity).supportFragmentManager.beginTransaction()
.replace(R.id.main_frm, HomeFragment())
.commitAllowingStateLoss()
}
Toast Message
토스트메세지는 팝업창과 비슷하게 사용자에게 보여주는 메세지이다.
binding.songLalacLayout.setOnClickListener {
Toast.makeText(activity, "LILAC", Toast.LENGTH_SHORT).show()
}
이렇게 라일락이라는 곡을 클릭하였을 때 LILAC이라는 토스트메세지를 나타낼 수 있다.
'Android > Basic' 카테고리의 다른 글
[Android] BottomNavigation (0) | 2022.04.17 |
---|---|
[Android] Data class와 Activity 데이터 전송 (0) | 2022.04.16 |
[Android] Redeclaration Error (0) | 2022.04.14 |
[Android] Activity전환과 ViewBinding (0) | 2022.04.13 |
[Android] ConstraintLayout, Chain 설정 (0) | 2022.04.12 |