Несовместимые типы: Int и Article - PullRequest
0 голосов
/ 11 октября 2019

Я занимаюсь разработкой новостного приложения. Я реализовал многократные типы в классе адаптеров recyclerview, но получаю следующую ошибку

Несовместимые типы: Int и Article

ниже класса BBCSportAdapterгде я реализовал несколько типов просмотра

@Suppress("UNREACHABLE_CODE")
class BBCSportAdapter(private val listViewType: List<Int>) : RecyclerView.Adapter<BBCSportAdapter.MyViewHolder>() {


    companion object {
        val ITEM_A = 1
        var ITEM_B = 2
    }


    var articleList: List<Article> = listOf()


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {

        val inflater =
            LayoutInflater.from(parent.context)
        return when (viewType) {
            ITEM_A -> ViewHolderItemA(inflater.inflate(R.layout.bbc_sport_list, null))

            else ->  {
                ViewHolderItemB(inflater.inflate(R.layout.bbc_sport_item, null))
            }

           }

        }




        @SuppressLint("NewApi")
        override fun onBindViewHolder(holder: MyViewHolder, position: Int) {

            val viewType = articleList[position]
            when (viewType) {
                ITEM_A -> {
                    val viewHolderA = holder as ViewHolderItemA
                    Picasso.get().load(articleList[position].urlToImage)
                        .into(viewHolderA.topFlameImageView)
                }else ->  {
                    val viewHolderB = holder as ViewHolderItemB

                }
            }
        }

    override fun getItemCount(): Int {
        return articleList.size
    }


//            holder.articleTitle.text = articleList[position].title
//                    holder . articleSourceName . text = articleList [position].source.name
//                    Picasso . get ().load(articleList.get(position).urlToImage).into(holder.image)
//
//                val input = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX")
//                val output = SimpleDateFormat("dd/MM/yyyy")
//                var d = Date()
//            try {
//                d = input.parse(articleList[5].publishedAt)
//            } catch (e: ParseException) {
//                try {
//                    val fallback = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
//                    fallback.timeZone = TimeZone.getTimeZone("UTC")
//                    d = fallback.parse(articleList[5].publishedAt)
//                } catch (e2: ParseException) {
//                    // TODO handle error
//                    val formatted = output.format(d)
//                    val timelinePoint = LocalDateTime.parse(formatted)
//                    val now = LocalDateTime.now()
//
//                    var elapsedTime = Duration.between(timelinePoint, now)
//
//                    println(timelinePoint)
//                    println(now)
//                    elapsedTime.toMinutes()
//
//                    holder.articleTime.text = "${elapsedTime.toMinutes()}"
//                }
//            }
//        }

        fun setMovieListItems(articleList: List<Article>) {
            this.articleList = articleList
            notifyDataSetChanged()
        }

        open inner class MyViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!){}


        inner class ViewHolderItemA(itemView: View) : MyViewHolder(itemView) {
            val topFlameImageView: ImageView = itemView.findViewById(R.id.topFlameImageView)
        }


        inner class ViewHolderItemB(itemView: View?) : MyViewHolder(itemView) {
            val image: ImageView = itemView!!.findViewById(R.id.imageView)
            val articleTitle: TextView = itemView!!.findViewById(R.id.articleTitle)
            val articleSourceName: TextView = itemView!!.findViewById(R.id.articleSourceName)
            val imageCategory: ImageView = itemView!!.findViewById(R.id.imageCategory)
            val articleTime: TextView = itemView!!.findViewById(R.id.articleTime)
        }

    }

Я перешел по этой ссылке https://github.com/CoderJava/Multiple-View-Type-RecyclerView-Kotlin-Android/blob/master/app/src/main/java/com/ysn/multipleviewtypeexample/AdapterRecyclerView.kt

1 Ответ

0 голосов
/ 11 октября 2019

В вашем onBindViewHolder articleList есть список художественных элементов, но в вашем выражении when вы сравниваете Article с Int, то есть ITEM_A, что неверно. Вместо этого у вас должен быть какой-то тип в вашем объекте статьи, и сравнение основано на этом типе. Более того, вы не реализовали getItemViewType (), где вы можете принять решение, какой вид будет раздутым. В вашем случае viewType в параметре oncreateViewHolder всегда будет возвращать 0, иначе условие будет выполнено всегда, и у вас всегда будет один тип представления.

...