더보기
Chapter 2. Activity와 Fragment
setContentView(R.layout.activity_song)
이 방법은 전통적인 방법으로, 레이아웃 리소스 파일(activity_song.xml)을 직접 액티비티의 콘텐츠 뷰로 설정
setContentView(R.layout.activity_song);
- 장점: 사용이 간단하고, 소규모 프로젝트나 간단한 UI에서는 충분히 효과적입니다.
- 단점: 레이아웃 파일에 정의된 뷰에 접근하려면 findViewById를 사용해야 합니다. 이로 인해 코드가 장황해지고, 뷰를 찾는 과정에서 오류가 발생할 수 있습니다.
binding = ActivitySongBinding.inflate(layoutInflater); setContentView(binding.root)
이 방법은 뷰 바인딩(View Binding)을 사용하여 레이아웃을 설정하는 방법입니다.
뷰 바인딩은 Android Studio에서 자동으로 생성된 바인딩 클래스를 사용하여 레이아웃 파일에 정의된 뷰에 타입 안전하게 접근할 수 있게 합니다.
binding = ActivitySongBinding.inflate(layoutInflater);
setContentView(binding.root);
- 장점:
- 타입 안전성: findViewById를 사용할 필요가 없으며, XML 레이아웃 파일에 정의된 뷰에 대해 자동으로 생성된 바인딩 클래스를 통해 접근합니다.
- 컴파일 타임 검사: 존재하지 않는 뷰를 참조하려고 하면 컴파일 타임에 오류가 발생합니다.
- 코드 간결화: 뷰에 대한 접근이 더 직관적이고 간결해집니다.
SongActivity
// Intent 객체에 "title"과 "singer"라는 추가 데이터가 있는지 확인합니다.
if(intent.hasExtra("title") && intent.hasExtra("singer")){
// "title"과 "singer"라는 추가 데이터가 있는 경우, 해당 데이터를 텍스트 뷰에 설정합니다.
binding.songMusicTitleTv.text = intent.getStringExtra("title")
binding.songSingerNameTv.text = intent.getStringExtra("singer")
}
// "songDownIb"라는 ID를 가진 버튼이 클릭되면 `setPlayerStatus(true)` 메서드를 호출합니다.
binding.songDownIb.setOnClickListener{
setPlayerStatus(true)
}
// "songPauseIv"라는 ID를 가진 버튼이 클릭되면 `setPlayerStatus(false)` 메서드를 호출합니다.
binding.songPauseIv.setOnClickListener {
setPlayerStatus(false)
}
MainActivity
// `mainPlayerCl`이라는 ID를 가진 뷰가 클릭되었을 때 실행됩니다.
binding.mainPlayerCl.setOnClickListener {
// `SongActivity`로 전환하기 위한 `Intent` 객체를 생성합니다.
val intent = Intent(this, SongActivity::class.java)
// 현재 곡의 제목과 가수를 `Intent`에 추가 데이터로 포함시킵니다.
intent.putExtra("title", song.title)
intent.putExtra("singer", song.singer)
// `SongActivity`를 시작합니다.
startActivity(intent)
}
Fragment 전환(HomeFragment ↔ AlbumFragment) 구현하기‼️
- Fragment 전환 시 HomeFragment에서 앨범의 데이터를 AlbumFragment로 전달하여 클릭한 앨범과 동일한 앨범이 나오도록 구현해보기
Fragment 전환(HomeFragment <-> AlbumFragment
Bundle을 이용해 데이터 전달
binding.homeAlbumImgIv1.setOnClickListener {
// Bundle 객체를 생성하여 데이터를 추가
val bundle = Bundle().apply {
putString("title", binding.titleLilac.text.toString())
putString("singer", binding.singerIu.text.toString())
}
// AlbumFragment 인스턴스를 생성하고 번들을 인자로 설정
val albumFragment = AlbumFragment().apply {
arguments = bundle
}
// MainActivity의 FragmentManager를 사용하여 Fragment를 교체
(context as MainActivity)
.supportFragmentManager.beginTransaction()
.replace(R.id.main_frm, albumFragment)
.commitAllowingStateLoss()
}
이미지 뷰(homeAlbumImgIv1)를 클릭했을 때, AlbumFragment로 데이터를 전달하고 해당 프래그먼트를 화면에 표시하는 기능을 구현
Activity 전환 (MainActivity <-> SongActivity)
'공부 > Android' 카테고리의 다른 글
FLO 앱 - 1주차 (0) | 2024.06.09 |
---|---|
Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린 둘째마당 (3~5장) (0) | 2024.05.25 |
Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린 첫째마당 (1~2장) (0) | 2024.05.19 |
코틀린 3강으로 끝내기 feat.안드로이드 개발 섹션 1 (0) | 2024.05.04 |
3강으로 끝나는 코틀린 안드로이드 개발 섹션 0 (0) | 2024.04.13 |