-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
과제2 제출합니다 #21
base: main
Are you sure you want to change the base?
과제2 제출합니다 #21
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.wafflestudio.waffleseminar2024 | ||
|
||
import kotlinx.serialization.Serializable | ||
import kotlinx.serialization.decodeFromString | ||
import kotlinx.serialization.json.Json | ||
|
||
@Serializable | ||
data class Genre ( | ||
val id: Int, | ||
val name: String | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package com.wafflestudio.waffleseminar2024 | ||
|
||
import android.util.Log | ||
import android.view.LayoutInflater | ||
import android.view.View | ||
import android.view.ViewGroup | ||
import android.widget.TextView | ||
import androidx.recyclerview.widget.RecyclerView | ||
|
||
class GenreAdapter(private var genres: List<Genre>) : RecyclerView.Adapter<GenreAdapter.GenreViewHolder>() { | ||
|
||
private var filteredGenres: List<Genre> = genres | ||
|
||
class GenreViewHolder(view: View) : RecyclerView.ViewHolder(view) { | ||
val genreName: TextView = view.findViewById(R.id.genreName) | ||
} | ||
|
||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenreViewHolder { | ||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_genre, parent, false) | ||
return GenreViewHolder(view) | ||
} | ||
|
||
override fun onBindViewHolder(holder: GenreViewHolder, position: Int) { | ||
Log.d("GenreAdapter", "Binding genre: ${filteredGenres[position].name}") | ||
holder.genreName.text = filteredGenres[position].name | ||
} | ||
|
||
override fun getItemCount(): Int { | ||
Log.d("GenreAdapter", "Item count: ${filteredGenres.size}") | ||
return filteredGenres.size | ||
} | ||
|
||
fun updateGenres(newGenres: List<Genre>) { | ||
genres = newGenres | ||
filteredGenres = newGenres | ||
notifyDataSetChanged() | ||
Log.d("GenreAdapter", "Genres updated, new size: ${filteredGenres.size}") | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.wafflestudio.waffleseminar2024 | ||
|
||
import kotlinx.serialization.Serializable | ||
|
||
@Serializable | ||
data class GenreList( | ||
val genres: List<Genre> | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package com.wafflestudio.waffleseminar2024 | ||
|
||
import kotlinx.serialization.Serializable | ||
|
||
@Serializable | ||
data class Movie ( | ||
val adult: Boolean, | ||
val backdrop_path: String?, | ||
val genre_ids: List<Int>, | ||
val id: Int, | ||
val original_language: String, | ||
val original_title: String, | ||
val overview: String, | ||
val popularity: Double, | ||
val poster_path: String?, | ||
val release_date: String, | ||
val title: String, | ||
val video: Boolean, | ||
val vote_average: Double, | ||
val vote_count: Int | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package com.wafflestudio.waffleseminar2024 | ||
|
||
import android.view.LayoutInflater | ||
import android.view.View | ||
import android.view.ViewGroup | ||
import android.widget.ImageView | ||
import androidx.recyclerview.widget.RecyclerView | ||
|
||
import coil3.load | ||
|
||
class MovieAdapter(private var movies: List<Movie>) : RecyclerView.Adapter<MovieAdapter.MovieViewHolder>() { | ||
|
||
inner class MovieViewHolder(view: View) : RecyclerView.ViewHolder(view) { | ||
private val posterImageView: ImageView = view.findViewById(R.id.posterImageView) | ||
|
||
fun bind(movie: Movie) { | ||
val posterUrl = movie.poster_path?.let { | ||
"https://image.tmdb.org/t/p/w185$it" | ||
} ?: R.drawable.ic_app | ||
posterImageView.load(posterUrl) | ||
} | ||
} | ||
|
||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder { | ||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_movie, parent, false) | ||
return MovieViewHolder(view) | ||
} | ||
|
||
override fun onBindViewHolder(holder: MovieViewHolder, position: Int) { | ||
holder.bind(movies[position]) | ||
} | ||
|
||
override fun getItemCount(): Int = movies.size | ||
|
||
fun updateMovies(newMovies: List<Movie>) { | ||
this.movies = newMovies | ||
notifyDataSetChanged() | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.wafflestudio.waffleseminar2024 | ||
|
||
import kotlinx.serialization.Serializable | ||
|
||
@Serializable | ||
data class MovieList( | ||
val movies: List<Movie> | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
val 변수는 초기화 후에 다른 객체를 할당하려하면 컴파일에러를 내줘서 실수할 일이 줄어듭니다!
Java에서 final 변수라고 생각하시면 돼요
많은 경우에 var 대신 val 쓰시는 걸 추천합니다