像3个不同阶段的系统

问题描述 投票:0回答:6

我正在使用Like和Dislike Button的逻辑

我声明变量的地方

var user_like_dislike_state == 0

当我点击Like按钮值变为1时,如果我再次按下它将变回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)
        }
    }
}
android kotlin
6个回答
2
投票

你只需要一个boolean标志并将其初始值设置为false。单击按钮时,您只需使用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)
})

1
投票

也许是因为Recyclerview,我假设有一个帖子/行在你向下滚动或向上滚动时消失了。当Recyclerview向上或向下滚动时,每个视图/行都会被重新加载,这就是为什么你总是得到0


0
投票

使用成员user_like_dislike_state创建类:Int传递该类的ArrayList以回收适配器并在列表中单独处理每个行视图。


0
投票

我建议在喜欢/不喜欢的时候使用局部变量,否则var user_like_dislike_state将保留先前喜欢/不喜欢的状态,除非你重置它


0
投票

只需在模型类示例中获取一个变量非常简单: - var like_Status并在recyclelerview中单击时进行相应设置,当您滚动列表时检查该变量是否相似

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

您必须维护模型类中每个like按钮的状态。这就是您在代码中遇到此问题的原因。请保持模型类中每个类似按钮的状态,并在循环视图中滚动时检查按钮的先前状态。


0
投票

我试过这段代码并且工作了:

I used **Hashmap** for save my Comment_id and user_like_state

代码:

//变量声明:

键和变量Int都是因为我的Comment_id和user_like_state是Int:

var commentHashMap = HashMap<Int, Int>()

然后为

Upvote:

holder.upvote?.setOnClickListener({
                comment_id = commentsList.get(position).post_id
                if(commentHashMap .get(comment_id) == null || commentHashMap.get(comment_id)== 0 || commentHashMap.get(comment_id)== -1){
                    commentHashMap.put(comment_id, 1)
                } else{
                    commentHashMap.put(comment_id, 0)
                }
                upVote.onClick(it)
            })

Downvote:

holder.downVote?.setOnClickListener({
                comment_id = commentsList.get(position).post_id
                if(commentHashMap .get(comment_id) == null || commentHashMap.get(comment_id)== 0 || commentHashMap.get(comment_id)== 1){
                    commentHashMap.put(comment_id, -1)
                } else{
                    commentHashMap.put(comment_id, 0)
                }
                downVote.onClick(it)
            })

想要类似于facebook的代码的人可以使用此代码

© www.soinside.com 2019 - 2024. All rights reserved.