Как система с 3 различными этапами - PullRequest
0 голосов
/ 04 декабря 2018

Я использую логику для кнопок «Мне нравится» и «Не нравится»

, где я объявил переменную

var user_like_dislike_state == 0

Когда я нажимаю кнопку «Нравится»при повторном нажатии значение изменится на единицу, оно вернется к 0

if(user_like_dislike_state == 0 || user_like_dislike_state == 1){
user_like_dislike_state = -1
} else {
user_like_dislike_state = 0
}

. Это работает, когда я пытаюсь использовать одну запись, но когда я пытаюсь использовать эту логику в Recyclerview

ЕслиМне понравился пост 1, затем я пытаюсь понравиться пост 4, тогда он автоматически изменит значение на 0

В каких 3 штатах я дал

user_like_dislike_state == 1 : **Like**

user_like_dislike_state == 0 : **Non**

user_like_dislike_state == -1 : **Dislike**

Adapter.kt:

class ViewsinglepostAdapter(var commentsList: ArrayList<Comment>, val upVote : View.OnClickListener, val downVote: View.OnClickListener): RecyclerView.Adapter<ViewsinglepostAdapter.ViewHolder>(){
    var user_like_dislike_state = 0
    var comment_id = 0

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.user_name?.setText(commentsList.get(position).User)
        holder.comment?.setText(commentsList.get(position).comment)
        holder.upvote?.setOnClickListener({
            if(user_like_dislike_state == 0 || user_like_dislike_state == -1){
                user_like_dislike_state = 1
            } else {
                user_like_dislike_state = 0
            }
            comment_id = commentsList.get(position).Id
            upVote.onClick(it)
        })
        holder.downvote?.setOnClickListener({it->
            if(user_like_dislike_state == 0 || user_like_dislike_state == 1){
                user_like_dislike_state = -1
            } else {
                user_like_dislike_state = 0
            }
            comment_id = commentsList.get(position).Id
            downVote.onClick(it)
            user_like_dislike_state == 0
        })
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder{
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.singlecomment,parent,false)
        return ViewHolder(itemView)
    }

    override fun getItemCount(): Int {
        return commentsList.count()
    }


    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
        var upvote: ImageView? = null
        var downvote: ImageView? = null
        var user_name: TextView? = null
        var comment: TextView? = null
        init {
            this.upvote = itemView.findViewById(R.id.upvote_post_img)
            this.downvote = itemView.findViewById(R.id.down_vote_post_img)
            this.user_name = itemView.findViewById(R.id.user_name)
            this.comment = itemView.findViewById(R.id.comment)
        }
    }
}

Ответы [ 5 ]

0 голосов
/ 04 декабря 2018

Это очень просто, просто возьмите переменную в примере класса модели: - var like_Status и установите ее соответствующим образом при щелчке в обзоре переработчика, и когда вы прокручиваете список, проверьте, что переменная, такая как

if(like_statusbutton==-1)
{ 
setLikeStatus="dislike"
}
else if(like_status==1)
 {
 setLikeStatus="like"
}
else {
 setLikeStatus="none"
}

, вы должныподдерживать статус для каждой кнопки «Нравится» в классе модели.вот почему вы сталкиваетесь с этой проблемой в своем коде.Пожалуйста, сохраняйте статус каждой кнопки «Нравится» в классе модели, и во время прокрутки в окне повторного просмотра проверяйте предыдущее состояние кнопки.

0 голосов
/ 04 декабря 2018

Вы просто берете один флаг boolean и устанавливаете его начальное значение как ложное.Когда кнопка нажата, вы просто обновляете ее значение с помощью оператора Turnery, чтобы получить значение

user_like_dislike_state = user_like_dislike_state?false:true;

// Для кнопки upvote вы должны установить один или -1.

holder.upvote?.setOnClickListener({
user_like_dislike_state = user_like_dislike_state<1?1:-1;
comment_id = commentsList.get(position).Id
upVote.onClick(it)
})

для downvoteкнопку, которую вы проверяете, уже проголосовали против.

holder.downvote?.setOnClickListener({it->
user_like_dislike_state = user_like_dislike_state>-1?-1:0;
comment_id = commentsList.get(position).Id
downVote.onClick(it)
})
0 голосов
/ 04 декабря 2018

Я бы посоветовал использовать локальную переменную, когда она нравится / не нравится, в противном случае var user_like_dislike_state сохранит состояние предыдущего типа нравится / не нравится, если вы не сбросите ее

0 голосов
/ 04 декабря 2018

Может быть из-за этого Recyclerview, у меня есть предположение, что есть пост / строка, которая исчезает, когда вы прокручиваете ее вниз или прокручиваете вверх.Каждый вид / строка, которые пропали в Recyclerview при прокрутке вверх или вниз, будут перезагружаться снова, поэтому вы всегда получаете 0

0 голосов
/ 04 декабря 2018

create class with member user_like_dislike_state: Int передает ArrayList этого класса для утилизации адаптера и обрабатывает каждое представление строки отдельно в списке.

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