Android Studio/ReviewMate

[Android Studio/Kotlin] Adapter사용법

kangchaewon 2023. 12. 6. 01:09

어뎁터 사용 방법 0. recyclerview layout xml작성(사용할 fragment에)

  1. Adapter클래스 작성(recylerview에 들어갈 xml을 받음)
class MovieAdapter (var movies : List<Movie>) : RecyclerView.Adapter<MovieAdapter.MovieViewHolder>(){

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder {
        return MovieViewHolder(
            ItemMovieBinding.inflate(
                LayoutInflater.from(parent.context),
                parent,
                false // 직접 사용하면 안되기 때문
            )
        )
    }

    override fun getItemCount(): Int = movies.size

    override fun onBindViewHolder(holder: MovieViewHolder, position: Int) {
        holder.bind(movies[position])
    }

    class MovieViewHolder(val binding : ItemMovieBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind(movie : Movie) {
            // 데이터 대입하는 코드

            binding.itemMovieTitle.text = movie.movieTitle

        }

    }
}
  • getItemCount()
  • onCreateViewHolder()
  • onBindViewHolder
  • MovieViewHolder

⇒ 3개의 override 메소드와 1개의 Holder class필요

  1. 사용할 fragmet에서 데이터를 전달
class FragmentOne : Fragment() {
    lateinit var binding : FragmentOneBinding
    private val itemList = listOf<Movie>(
        // 예시를 위한 가짜 데이터 사용 
// ** Movie모델 data class 생성되어 있음
        Movie(
            1,
            "영화1",
            "설명",
            "poster_path_string", // drawable 리소스의 이름을 사용하면 안됨
            "backdrop_path_string", // drawable 리소스의 이름을 사용하면 안됨
            6.9f,
            "2023-08-01",
            435.0f // float일 시 f붙여야 함
        ),
        Movie(
            2,
            "영화2",
            "설명",
            "poster_path_string", // drawable 리소스의 이름을 사용하면 안됨
            "backdrop_path_string", // drawable 리소스의 이름을 사용하면 안됨
            6.9f,
            "2023-08-02",
            435.0f // float일 시 f붙여야 함
        ),
        Movie(
            3,
            "영화3",
            "설명",
            "poster_path_string", // drawable 리소스의 이름을 사용하면 안됨
            "backdrop_path_string", // drawable 리소스의 이름을 사용하면 안됨
            6.9f,
            "2023-08-03",
            435.0f // float일 시 f붙여야 함
        ),
        Movie(
            4,
            "영화4",
            "설명",
            "poster_path_string", // drawable 리소스의 이름을 사용하면 안됨
            "backdrop_path_string", // drawable 리소스의 이름을 사용하면 안됨
            6.9f,
            "2023-08-04",
            435.0f // float일 시 f붙여야 함
        )
    )

예시를 위해 가짜 데이터 작성

override fun onStart() {
        super.onStart()
        binding.popularMovies.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
        binding.popularMovies.adapter = MovieAdapter(itemList)
    }

여기서!! 좌우 스크롤 지정 방법

⇒ LayoutMangager에 LinearLayoutManager.HORIZONTAL