전공/Android
[영화 정보 앱 만들기] 02. 데이터와 recycler view
BBungyaLog
2024. 6. 19. 23:17
# DTO 의 작성 및 샘플 데이터 추가
1. DTO(Data Transfer Object) 구현
- Item 항목 하나는 이미지와 두 개의 텍스트의 집합(영화 사진, 영화 제목, 영화 평점)
- 관련 있는 여러 데이터 값을 하나로 묶어 다른 계층에 전송 하는 용도로 사용하는 Design Pattern
data class MovieDto(val photo: Int, val movie: String, val rate: Int) {
override fun toString() = "$movie ($rate)"
}
2. 샘플 데이터 추가
class MovieDao {
val movies = ArrayList<MovieDto>()
init {
movies.add (MovieDto(R.drawable.movie01, "은혼 더 파이널", 4.5))
movies.add (MovieDto(R.drawable.movie02, "어벤저스 엔드게임", 4.3))
movies.add (MovieDto(R.drawable.movie03, "엘리멘탈", 4.1))
movies.add (MovieDto(R.drawable.movie04, "파묘", 4.8))
movies.add (MovieDto(R.drawable.movie05, "범죄도시3", 3.8))
movies.add (MovieDto(R.drawable.movie06, "인사이드 아웃2", 4.1))
}
}
3. Adapter 구현
class MovieAdapter(val movies: ArrayList<MovieDto>)
: RecyclerView.Adapter<MovieAdapter.MovieViewHolder>() {
override fun getItemCount(): Int = movies.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder {
val itemBinding = ListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return MovieViewHolder(itemBinding)
}
override fun onBindViewHolder(holder: MovieViewHolder, position: Int) {
holder.itemBinding.ivPhoto.setImageResource(movies[position].photo)
holder.itemBinding.tvMovie.text = movies[position].movie
holder.itemBinding.tvRate.text = movies[position].rate.toString()
}
inner class MovieViewHolder(val itemBinding: ListItemBinding): RecyclerView.ViewHolder(itemBinding.root) {
}
}
4. MainActivity에서 RecylcerView와 Adapter의 연결
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val movies = MovieDao().movies // 데이터
val adapter = MovieAdapter(movies) // 어댑터
val layoutManager = LinearLayoutManager(this) // 레이아웃 매니저 생성 및 설정
layoutManager.orientation = LinearLayoutManager.VERTICAL
binding.recyclerView.layoutManager = layoutManager
binding.recyclerView.adapter = adapter
}
