Переработчик вид андроид - PullRequest
0 голосов
/ 02 июля 2018

При каждом изменении значения в функции onbind моего адаптера добавляется новый элемент

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.postItemTitle.text= items[position].title
    var post:Post=items[position]
    val user_id=1
    var user_liked=post.users_liked
    if(user_liked.contains(user_id)){
        post.liked=true
    }
    if(post.liked){
        holder.postLikeBtn.setImageDrawable(context.resources.getDrawable(R.drawable.likered))
        holder.postLikes.text=(post.likes).toString()
    }
    else{
        holder.postLikes.text=(post.likes).toString()
    }
    holder.postLikeBtn.setOnClickListener {
        if(post.liked){
            //change color of like btn
//                holder.postLikeBtn.setImageDrawable(context.resources.getDrawable(R.drawable.likebtn))
                //set post as unliked
                post.liked=false
                //remove user from list of users that liked post
                user_liked.remove(user_id)
                //update the database
                var likes=post.likes--
                holder.postLikes.text=(likes).toString()
                val ref= FirebaseDatabase.getInstance().getReference("post")
                ref.child(post.key).setValue(post)
            }
            else{
                //update post that u liked
                post.liked=true
                user_liked.add(user_id)
                //make button red
                holder.postLikeBtn.setImageDrawable(context.resources.getDrawable(R.drawable.likered))
                //increase no of likes
                var likes=post.likes++
                holder.postLikes.text=(likes).toString()
                items[position]=post
                //update database

            val ref= FirebaseDatabase.getInstance().getReference("post")
            ref.child(post.key).setValue(post)
        }
        items[position]=post
        this.notifyDataSetChanged()
    }
}

1 Ответ

0 голосов
/ 03 июля 2018

Вы делаете это, на самом деле, совершенно неправильно. Вот статья , как обращаться с RecyclerView.

По сути, вы не обрабатываете пользовательский интерфейс / данные внутри onBindViewHolder, он предназначен для передачи данных в ваш реальный класс, который расширяется от RecyclerView.ViewHolder и переопределяет bind метод. Подробнее читайте в статье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...