전공/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
}

감독 텍스트뷰 추가함