lmw
2023-06-13 adf8013576cbdd12e5ebea8ff7e32baf5d558b27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.kuanzhai.user.ui.menu.adapter
 
import android.view.LayoutInflater
import android.widget.LinearLayout
import android.widget.TextView
import cn.sinata.xldutils.adapter.HFRecyclerAdapter
import cn.sinata.xldutils.adapter.util.ViewHolder
import cn.sinata.xldutils.clickDelay
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.utils.SpanBuilder
import cn.sinata.xldutils.utils.interval
import cn.sinata.xldutils.utils.parserTime
import cn.sinata.xldutils.utils.toMDHMTime
import cn.sinata.xldutils.visible
import com.facebook.drawee.view.SimpleDraweeView
import com.kuanzhai.user.R
import com.kuanzhai.user.dialog.CommentDialog
import com.kuanzhai.user.network.entity.CommentBean
import kotlinx.android.synthetic.main.item_reply.view.*
import java.util.ArrayList
 
class CommentAdapter(list: ArrayList<CommentBean>):HFRecyclerAdapter<CommentBean>(list, R.layout.item_comment) {
    var callback:ReplyCallback? = null
    val showReplyList = arrayListOf<Long>()
    override fun onBind(holder: ViewHolder, position: Int, data: CommentBean) {
        holder.bind<SimpleDraweeView>(R.id.iv_avatar).setImageURI(data.userAvatar)
        holder.setText(R.id.tv_name,data.userName)
        holder.setText(R.id.tv_time,data.createTime.parserTime().interval())
        val tvReply = holder.bind<TextView>(R.id.tv_reply)
        val tvReplyCount = holder.bind<TextView>(R.id.tv_reply_count)
        tvReplyCount.text = "展开${data.replyCommentList.size-3}条回复"
        val tvFull = holder.bind<TextView>(R.id.tv_full)
        val tvFullContent = holder.bind<TextView>(R.id.tv_content_full)
        val tvContent = holder.bind<TextView>(R.id.tv_content)
        tvContent.text = data.content
        tvFullContent.text = data.content
        tvFullContent.post {
            if (tvFullContent.lineCount > 3&&!data.isFull){
                tvContent.visible()
                tvFull.visible()
                tvFullContent.gone()
            }else{
                tvFullContent.visible()
                tvContent.gone()
                tvFull.gone()
            }
        }
        tvFull.setOnClickListener {
            data.isFull = true
            notifyItemChanged(position)
        }
        tvReplyCount.setOnClickListener {
            showReplyList.add(data.id)
            notifyItemChanged(position)
        }
        val replyCount = holder.bind<LinearLayout>(R.id.ll_open_reply)
        val llReply = holder.bind<LinearLayout>(R.id.ll_reply)
        if (data.replyCommentList.isEmpty()){
            replyCount.gone()
            llReply.gone()
        }else if (data.id in showReplyList||data.replyCommentList.size<4){ //全部展开
            replyCount.gone()
            llReply.visible()
            llReply.removeAllViews()
            data.replyCommentList.forEachIndexed { index, it ->
                val inflate = LayoutInflater.from(context).inflate(R.layout.item_reply, null)
                inflate.iv_avatar.setImageURI(it.userAvatar)
                inflate.tv_name.text = it.userName
                inflate.tv_time.text = it.createTime.parserTime().interval()
                inflate.tv_content_full.text =
                    if (it.replyUserId.isNotEmpty())
                        SpanBuilder("回复${it.replyUserName}:${it.content}").bold(0,2).build()
                    else it.content
                inflate.tv_reply.clickDelay {
                    callback?.onReply(position,index)
                }
                llReply.addView(inflate)
            }
        }else{
            replyCount.visible()
            llReply.visible()
            llReply.removeAllViews()
            data.replyCommentList.take(3).forEachIndexed { index, it ->
                val inflate = LayoutInflater.from(context).inflate(R.layout.item_reply, null)
                inflate.iv_avatar.setImageURI(it.userAvatar)
                inflate.tv_name.text = it.userName
                inflate.tv_time.text = it.createTime.parserTime().interval()
                inflate.tv_content_full.text =
                    if (it.replyUserId.isNotEmpty())
                        SpanBuilder("回复${it.replyUserName}:${it.content}").bold(0,2).build()
                    else it.content
                inflate.tv_reply.clickDelay {
                    callback?.onReply(position,index)
                }
                llReply.addView(inflate)
            }
        }
 
        tvReply.setOnClickListener {
            callback?.onComment(position)
        }
    }
 
    interface ReplyCallback{
        fun onComment(position: Int)
        fun onReply(position: Int,subPosition: Int)
    }
}