lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
app/src/main/java/com/sinata/xqmuse/ui/discovery/adapter/CommentAdapter.kt
@@ -1,116 +1,52 @@
package com.sinata.xqmuse.ui.discovery.adapter
import android.view.View
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.adapter.HFRecyclerAdapter
import cn.sinata.xldutils.adapter.util.ViewHolder
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.SpanBuilder
import cn.sinata.xldutils.utils.showAllowingStateLoss
import cn.sinata.xldutils.visible
import com.facebook.drawee.view.SimpleDraweeView
import com.sinata.xqmuse.R
import com.sinata.xqmuse.dialog.CommentClickPop
import com.sinata.xqmuse.dialog.ReplyDialog
import com.sinata.xqmuse.dialog.CommentLongClickDialog
import com.sinata.xqmuse.dialog.ReportDialog
import com.sinata.xqmuse.network.Comment
import com.sinata.xqmuse.dialog.SuccessDialog
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.ReplyComment
import com.sinata.xqmuse.network.entity.Comment
import com.sinata.xqmuse.network.request
import com.sinata.xqmuse.ui.discovery.DynamicActivity
import com.sinata.xqmuse.ui.discovery.ReplyActivity
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.extention.clickDelay
import com.sinata.xqmuse.utils.interfaces.StringCallback
import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.dip
import org.jetbrains.anko.startActivity
import java.util.ArrayList
class CommentAdapter(comment: ArrayList<Comment>):HFRecyclerAdapter<Comment>(comment, R.layout.item_comment) {
    val findId by lazy {
        (context as DynamicActivity).id
    }
    var layoutManager: LinearLayoutManager? = null
class CommentAdapter(comment: ArrayList<Comment>,val act:BaseActivity):HFRecyclerAdapter<Comment>(comment, R.layout.item_comment) {
    var callback:StringCallback? = null
    override fun onBind(holder: ViewHolder, position: Int, data: Comment) {
        holder.bind<SimpleDraweeView>(R.id.iv_avatar).setImageURI(data.headImg)
        holder.setText(R.id.tv_name,data.userName)
        holder.bind<SimpleDraweeView>(R.id.iv_avatar).setImageURI(data.avatar)
        holder.setText(R.id.tv_name,data.nickname)
        holder.setText(R.id.tv_content,data.content)
        holder.setText(R.id.tv_time,data.insertTime)
        val tv_reply_count = holder.bind<TextView>(R.id.tv_reply_count)
        if (data.commentList.size>2&&!data.showAll){
            tv_reply_count.text = "查看${data.commentList.size}条回复"
            tv_reply_count.visible()
            tv_reply_count.setOnClickListener {
                context.startActivity<ReplyActivity>("data" to data,"findId" to findId)
            }
        }else
            tv_reply_count.gone()
        holder.setText(R.id.tv_time,data.publishTime)
        val tv_reply = holder.bind<TextView>(R.id.tv_reply)
        if (data.replyContent.isNullOrEmpty())
            tv_reply.gone()
        else{
            tv_reply.visible()
            tv_reply.text = SpanBuilder("平台回复:${data.replyContent}").bold(0,5).build()
        }
        val tv_like = holder.bind<TextView>(R.id.tv_like)
        tv_like.text = data.likeCount.toString()
        tv_like.setCompoundDrawablesRelativeWithIntrinsicBounds(if (data.isLike == "1") R.mipmap.dianzaned else R.mipmap.dianzan,0,0,0) //todo是否点赞
        tv_like.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,if (data.like == 1) R.mipmap.dianzaned else R.mipmap.dianzan,0) //todo是否点赞
        tv_like.clickDelay {
            if (data.isLike!="1")
                HttpManager.doLike(findId,2,data.id).request(context as BaseActivity){_,_->
                    data.isLike = if (data.isLike == "1") "0" else "1"
                    data.likeCount = if (data.isLike == "1") data.likeCount+1 else data.likeCount-1
                HttpManager.doLike(data.id).request(act){_,_->
                    data.like = if (data.like == 1) 2 else 1
                    notifyItemChanged(position)
                }
        }
        holder.itemView.setOnClickListener {
            val conversationLongClickPop = CommentClickPop(context)
            conversationLongClickPop.setCallback(object : StringCallback {
                override fun onResult(rst: String) {
                    val activity = context as BaseActivity
                    val type = if(rst == "report") ReportDialog.TYPE_REPORT else if (data.replyUserId == SPUtils.instance().getString(
                            Const.User.USER_ID,"-1")) ReportDialog.TYPE_REPLY else ReportDialog.TYPE_COMMENT
                    if(type == ReportDialog.TYPE_REPORT)
                        ReportDialog.show(
                            activity.supportFragmentManager,
                            object : StringCallback {
                                override fun onResult(rst: String) {
                                    HttpManager.report(2,data.id,rst).request(activity){ _, _->
                                        activity.myToast("举报成功")
                                    }
                                }
                            })
                    else
                        ReplyDialog.show(activity.supportFragmentManager,"回复${data.userName}",object :StringCallback{
                            override fun onResult(rst: String) {
                                HttpManager.addComment(findId,data.id,rst,data.id,data.userId).request(activity){ _, _->
                                    EventBus.getDefault().post(EmptyEvent(Const.EventCode.REFRESH_REPLY))
                                    activity.myToast("评论成功")
                                }
                            }
                        })
                }
            })
            conversationLongClickPop.showAsDropDown(holder.bind(R.id.tv_name),context.dip(200),0)
        holder.itemView.setOnLongClickListener {
            callback?.onResult(position.toString())
            return@setOnLongClickListener false
        }
        val rv_reply = holder.bind<RecyclerView>(R.id.rv_reply)
        rv_reply.layoutManager = LinearLayoutManager(context)
        val reply = arrayListOf<ReplyComment>()
        val adapter = ReplyAdapter(reply)
        adapter.findId = findId
        adapter.commentId = data.id
        if (data.showAll){
            reply.addAll(data.commentList)
        }else{
            reply.addAll(data.commentList.take(2))
        }
        rv_reply.adapter = adapter
    }
    override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
        super.onAttachedToRecyclerView(recyclerView)
        layoutManager = recyclerView.layoutManager as LinearLayoutManager
    }
}