изменение изображения на неправильное изображение во вложенном окне просмотра после прокрутки - PullRequest
0 голосов
/ 10 февраля 2020

я делаю простой каталог mov ie с API от https://www.themoviedb.org.

сначала я получаю жанр mov ie и l oop каждый жанр, чтобы получить mov ie

fun getGenre(){
    index = 0
    dataMovie.clear()
    val Client = Client()
    val apiRoute: Route = Client.getClient()!!.create(Route::class.java)
    apiRoute.getCategoryMovie().enqueue(object :
        Callback<MovieGenresResponse> {
        override fun onResponse(call: Call<MovieGenresResponse>, response: Response<MovieGenresResponse>) {

            if(response.code() == 200) {
                g = response.body().genres
                getMovie()
            }
        }
        override fun onFailure(call: Call<MovieGenresResponse>, t: Throwable){
            Log.e("Ops", t.message)

        }
    })
}

fun getMovie(){
    val Client = Client()
    val apiRoute: Route = Client.getClient()!!.create(Route::class.java)
    apiRoute.getDataMovie(g[index].id).enqueue(object :
        Callback<MovieResponse> {
        override fun onResponse(call: Call<MovieResponse>, response: Response<MovieResponse>) {
            if(response.code() == 200 ) {
                val items = MC(g[index].id,g[index].name,response.body().results)
                index++
                dataMovie.add(items)
                if((index) < g.count()){
                    getMovie()
                }else {
                    listMovieCategorys.postValue(dataMovie)
                }
            }

            Log.d("RESPONSE",response.raw().request().url().toString())
        }
        override fun onFailure(call: Call<MovieResponse>, t: Throwable){
            Log.e("Ops",t.message)
        }
    })
}

результат хороший

Моя проблема заключается в том, что когда я прокручиваю просмотрщик, изображение перезагружается и показывает неправильное изображение с заголовком mov ie. я ищу и некоторые из них лучше использовать Picaso или Glide, поэтому я использую Glide, как это

override fun onBindViewHolder(cardViewViewHolder: CardViewViewHolder, i: Int) {
    val movie = listMovie[i]
    try {
        if (movie.poster_path != null && movie.poster_path != ""){
            val options = RequestOptions()
                .centerCrop()
                .placeholder(R.mipmap.ic_launcher_round)
                .error(R.mipmap.ic_launcher_round)

            Glide.with(context!!).load("https://image.tmdb.org/t/p/w342/"+movie.poster_path).apply(options).into(cardViewViewHolder.poster)
        }
    }  catch (e: Exception) {
        Log.d("Poster", e.message.toString())
    }
    cardViewViewHolder.title.text = movie.title
    cardViewViewHolder.itemView.setOnClickListener {
        if(context != null){
            val moveWithDataIntent = Intent(context, DetailItem::class.java)
            moveWithDataIntent.putExtra(DetailItem.EXTRA_CLASS, "MOVIE")
            moveWithDataIntent.putExtra(DetailItem.EXTRA_DATA, listMovie[i])
            context!!.startActivity(moveWithDataIntent)
        } else {
            context = it.getContext()
        }

    }

}

, но все еще не решаю мою проблему 1018 *

ОБНОВЛЕНИЕ (ПРОБЛЕМА ЗАГРУЗИТЕ НОМЕР КОНТЕКСТА В ГЛАЙДЕ)

после добавления некоторого изменения в условную проверку плаката я обнаружил проблему в загрузке изображения с глиссадой, проблема в контекст, в прокрутке контекст становится нулевым, я не знаю, почему, и изменение cardViewViewHolder itslef и больше контекста c контекст для моего компонента плаката

try {
        if (movie.poster_path != null && movie.poster_path != ""){
            val options = RequestOptions()
                .centerCrop()
                .placeholder(R.mipmap.ic_launcher_round)
                .error(R.mipmap.ic_launcher_round)

            Glide.with(cardViewViewHolder.poster.getContext()).load("https://image.tmdb.org/t/p/w342/"+movie.poster_path).apply(options).into(cardViewViewHolder.poster)
        } else {
            Log.d("PosterLog1", movie.poster_path.toString())
            cardViewViewHolder.poster.setImageResource(R.mipmap.ic_launcher_round)
        }
    }  catch (e: Exception) {
        Log.d("PosterLog2", e.message.toString())
        cardViewViewHolder.poster.setImageResource(R.mipmap.ic_launcher_round)
    }

я не замечаю этого, потому что изображение загружается правильно при первом запуске

1 Ответ

0 голосов
/ 10 февраля 2020

Добавьте изображение-заполнитель, когда вы не отображаете изображение, как в else условии и catch block.

try {
        if (movie.poster_path != null && movie.poster_path != ""){
            val options = RequestOptions()
                .centerCrop()
                .placeholder(R.mipmap.ic_launcher_round)
                .error(R.mipmap.ic_launcher_round)

            Glide.with(context!!).load("https://image.tmdb.org/t/p/w342/"+movie.poster_path).apply(options).into(cardViewViewHolder.poster)
        }else{
        cardViewViewHolder.poster.setImageResource(R.mipmap.ic_launcher_round) //placeholder image
        }
    }  catch (e: Exception) {
        Log.d("Poster", e.message.toString())
        cardViewViewHolder.poster.setImageResource(R.mipmap.ic_launcher_round) //placeholder image
    }

Надеюсь, это поможет !!

...