Files
yusheng-android/MainModule/src/main/java/com/xscm/modulemain/adapter/BosomFriendAdapter.kt
梁小江 1dfcf4e98c 1:完成挚友功能
2:添加在送特定礼物展示弹框功能
3:修改部分图片格式变成wedp
4:用户主页添加礼物墙和挚友
2025-11-21 18:54:40 +08:00

339 lines
16 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.xscm.modulemain.adapter
import android.view.View
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chad.library.adapter.base.entity.MultiItemEntity
import com.xscm.modulemain.R
import com.xscm.moduleutil.bean.RelationBean
import com.xscm.moduleutil.bean.RelationshipBean
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.utils.MeHeadView
import com.xscm.moduleutil.utils.SpUtil
import com.xscm.moduleutil.utils.TimeUtils
/**
* 挚友列表适配器
*/
class BosomFriendAdapter(data: MutableList<MultiItemEntity>) : BaseMultiItemQuickAdapter<MultiItemEntity, BaseViewHolder>(data) {
// 点击事件监听器
var onItemClickListener: OnItemClickListener? = null
interface OnItemClickListener {
fun onUserClick(userId: String)
fun onDeleteClick(relation: RelationshipBean)
fun onTopClick(relation: RelationshipBean)
fun onDetailsClick(relationId: Int)
}
companion object {
// 类型常量
const val TYPE_NOCP_WITH_NAME = 3 // no_cp集合relation_name不等于""并且relation_list的大小是1
const val TYPE_NOCP_WITH_NAME_AND_LIST = 5 // no_cp集合relation_name不等于""并且relation_list的大小大于1
}
init {
// 添加item类型
// addItemType(TYPE_CP_WITH_NAME, R.layout.item_relationship_list)
// addItemType(TYPE_CP_WITH_LIST, R.layout.item_bosom_cp)
addItemType(TYPE_NOCP_WITH_NAME, R.layout.item_relationship_list) // 修改为使用item_bosom_friend布局
// addItemType(TYPE_NOCP_WITH_LIST, R.layout.item_bosom_cp_friend)
addItemType(TYPE_NOCP_WITH_NAME_AND_LIST, R.layout.item_bosom_friend_details)
// addItemType(TYPE_NOCP_WITH_LIST_MORE, R.layout.item_bosom_friend_details)
}
override fun getItemViewType(position: Int): Int {
val data = getItem(position) // 假设你使用的是ListAdapter
when (data) {
is RelationBean.NoCpBean -> {
// 情况3no_cp集合relation_name不等于""并且relation_list的大小是1
if (data.relation_name.isNotEmpty() && data.relation_list.size == 1) {
return TYPE_NOCP_WITH_NAME
}
// 情况5no_cp集合relation_name不等于""并且relation_list的大小大于1
if (data.relation_name.isNotEmpty() && data.relation_list.size > 1) {
return TYPE_NOCP_WITH_NAME_AND_LIST
}
}
}
// 其他情况返回默认值
return TYPE_NOCP_WITH_NAME
}
/**
* 转换NoCp类型数据
*/
private fun convertNoCp(holder: BaseViewHolder, noCpBean: RelationBean.NoCpBean, viewType: Int) {
// 根据viewType设置不同的UI
when (viewType) {
TYPE_NOCP_WITH_NAME -> {
// 显示关系名称
holder.setText(R.id.tv_heartbeat, noCpBean.relation_name)
// 显示关系名称
holder.setText(R.id.tv_cp_lv, noCpBean.relation_name)
var meHeadView: MeHeadView
var meHeadView2: MeHeadView
meHeadView = holder.getView(R.id.user_nav1)
meHeadView2 = holder.getView(R.id.user_nav2)
meHeadView.setSex(noCpBean.relation_list[0].sex1,noCpBean.relation_list[0].avatar1)
meHeadView2.setSex(noCpBean.relation_list[0].sex2,noCpBean.relation_list[0].avatar2)
// 显示relation_list内容
// ImageUtils.loadHead(noCpBean.relation_list[0].avatar1, holder.getView(R.id.user_nav1))
holder.setText(R.id.tv_nickname1, noCpBean.relation_list[0].nickname1)
// ImageUtils.loadHead(noCpBean.relation_list[0].avatar2, holder.getView(R.id.user_nav2))
holder.setText(R.id.tv_nickname2, noCpBean.relation_list[0].nickname2)
if (noCpBean.relation_list[0].user_id1 == SpUtil.getUserId() || noCpBean.relation_list[0].user_id2 == SpUtil.getUserId()) {
holder.setVisible(R.id.icon_cp_zd, true)
holder.setVisible(R.id.icon_cp_dele, true)
} else {
holder.setVisible(R.id.icon_cp_zd, false)
holder.setVisible(R.id.icon_cp_dele, false)
}
// 设置点击事件
holder.getView<View>(R.id.user_nav1).setOnClickListener {
// 点击第一个用户头像
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id1.toString())
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
// 点击第二个用户头像
onItemClickListener?.onUserClick(noCpBean.relation_list[0].user_id2.toString())
}
// 设置删除按钮点击事件
holder.getView<View>(R.id.icon_cp_dele).setOnClickListener {
onItemClickListener?.onDeleteClick(noCpBean.relation_list[0])
}
// 设置置顶按钮点击事件
holder.getView<View>(R.id.icon_cp_zd).setOnClickListener {
onItemClickListener?.onTopClick(noCpBean.relation_list[0])
}
// 计算并显示剩余时间
val endTimeStr = noCpBean.relation_list[0].end_time
if (!endTimeStr.isNullOrEmpty()) {
try {
val endTime = endTimeStr.toLong()
val currentTime = System.currentTimeMillis() / 1000 // 当前时间戳(秒)
val remainingSeconds = endTime - currentTime
if (remainingSeconds > 0) {
val days = remainingSeconds / (24 * 60 * 60)
val hours = (remainingSeconds % (24 * 60 * 60)) / (60 * 60)
val timeText = if (days > 0) {
"${days}${hours}小时"
} else {
"${hours}小时"
}
holder.setText(R.id.tv_cp_num, timeText)
}
} catch (e: NumberFormatException) {
// 时间戳格式错误
holder.setVisible(R.id.tv_cp_num, false)
}
} else {
// end_time为空
holder.setVisible(R.id.tv_cp_num, false)
}
}
TYPE_NOCP_WITH_NAME_AND_LIST -> {
// 显示关系名称
holder.setText(R.id.tvRelationName, noCpBean.relation_name)
holder.setVisible(R.id.im_gd, true)
// 设置置顶按钮点击事件
holder.getView<View>(R.id.im_gd).setOnClickListener {
onItemClickListener?.onDetailsClick(noCpBean.relation_list[0].relation_id)
}
// 显示relation_list内容只显示前三个关系
if (noCpBean.relation_list.isNotEmpty()) {
// 获取前三个关系,如果不足三个则显示全部
val displayCount = minOf(3, noCpBean.relation_list.size)
// 根据显示数量设置不同的布局
when (displayCount) {
2 -> {
holder.setVisible(R.id.rlRelation1,true)
holder.setVisible(R.id.rlRelation2,true)
holder.setVisible(R.id.rlRelation3,false)
// 显示两个关系
val relation1 = noCpBean.relation_list[0]
val relation2 = noCpBean.relation_list[1]
var meHeadView : MeHeadView
var meHeadView2 : MeHeadView
meHeadView=holder.getView(R.id.user_nav1)
meHeadView2=holder.getView(R.id.user_nav2)
if (relation1.user_id1== SpUtil.getUserId()){
meHeadView.setSex(relation1.sex2,relation1.avatar2)
holder.setText(R.id.tv_nickname1, relation1.nickname2)
}else{
meHeadView.setSex(relation1.sex1,relation1.avatar1)
holder.setText(R.id.tv_nickname1, relation1.nickname1)
}
if (relation2.user_id1== SpUtil.getUserId()){
meHeadView2.setSex(relation2.sex2,relation2.avatar2)
holder.setText(R.id.tv_nickname2, relation2.nickname2)
}else{
meHeadView2.setSex(relation2.sex1,relation2.avatar1)
holder.setText(R.id.tv_nickname2, relation2.nickname1)
}
// ImageUtils.loadHead(relation1.avatar1, holder.getView(R.id.user_nav1))
// holder.setText(R.id.tv_nickname1, relation1.nickname1)
// ImageUtils.loadHead(relation2.avatar1, holder.getView(R.id.user_nav2))
// holder.setText(R.id.tv_nickname2, relation2.nickname1)
holder.setText(R.id.tv_gx_time, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[0].end_time.toLong()))
holder.setText(R.id.tv_gx_time2, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[1].end_time.toLong()))
holder.getView<View>(R.id.user_nav1).setOnClickListener {
if (relation1.user_id1== SpUtil.getUserId()){
// 点击第一个用户头像
onItemClickListener?.onUserClick(relation1.user_id2.toString())
}else {
// 点击第一个用户头像
onItemClickListener?.onUserClick(relation1.user_id1.toString())
}
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
if (relation2.user_id1== SpUtil.getUserId()) {
// 点击第二个用户头像
onItemClickListener?.onUserClick(relation2.user_id2.toString())
}else{
onItemClickListener?.onUserClick(relation2.user_id1.toString())
}
}
}
3 -> {
holder.setVisible(R.id.rlRelation1,true)
holder.setVisible(R.id.rlRelation2,true)
holder.setVisible(R.id.rlRelation3,true)
// 显示三个关系
val relation1 = noCpBean.relation_list[0]
val relation2 = noCpBean.relation_list[1]
val relation3 = noCpBean.relation_list[2]
var meHeadView : MeHeadView
var meHeadView2 : MeHeadView
var meHeadView3 : MeHeadView
meHeadView=holder.getView(R.id.user_nav1)
meHeadView2=holder.getView(R.id.user_nav2)
meHeadView3=holder.getView(R.id.user_nav3)
if (relation1.user_id1== SpUtil.getUserId()){
meHeadView.setSex(relation1.sex2,relation1.avatar2)
holder.setText(R.id.tv_nickname1, relation1.nickname2)
}else{
meHeadView.setSex(relation1.sex1,relation1.avatar1)
holder.setText(R.id.tv_nickname1, relation1.nickname1)
}
if (relation2.user_id1== SpUtil.getUserId()){
meHeadView2.setSex(relation2.sex2,relation2.avatar2)
holder.setText(R.id.tv_nickname2, relation2.nickname2)
}else{
meHeadView2.setSex(relation2.sex1,relation2.avatar1)
holder.setText(R.id.tv_nickname2, relation2.nickname1)
}
if (relation3.user_id1== SpUtil.getUserId()){
meHeadView3.setSex(relation3.sex2,relation3.avatar2)
holder.setText(R.id.tv_nickname3, relation3.nickname2)
}else{
meHeadView3.setSex(relation3.sex1,relation3.avatar1)
holder.setText(R.id.tv_nickname3, relation3.nickname1)
}
// ImageUtils.loadHead(relation1.avatar1, holder.getView(R.id.user_nav1))
// holder.setText(R.id.tv_nickname1, relation1.nickname1)
//
// ImageUtils.loadHead(relation2.avatar1, holder.getView(R.id.user_nav2))
// holder.setText(R.id.tv_nickname2, relation2.nickname1)
//
// ImageUtils.loadHead(relation3.avatar1, holder.getView(R.id.user_nav3))
// holder.setText(R.id.tv_nickname3, relation3.nickname1)
holder.setText(R.id.tv_gx_time, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[0].end_time.toLong()))
holder.setText(R.id.tv_gx_time2, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[1].end_time.toLong()))
holder.setText(R.id.tv_gx_time3, TimeUtils.formatDurationDaysOnly(noCpBean.relation_list[2].end_time.toLong()))
holder.getView<View>(R.id.user_nav1).setOnClickListener {
if (relation1.user_id1== SpUtil.getUserId()){
// 点击第一个用户头像
onItemClickListener?.onUserClick(relation1.user_id2.toString())
}else {
// 点击第一个用户头像
onItemClickListener?.onUserClick(relation1.user_id1.toString())
}
}
holder.getView<View>(R.id.user_nav2).setOnClickListener {
if (relation2.user_id1== SpUtil.getUserId()) {
// 点击第二个用户头像
onItemClickListener?.onUserClick(relation2.user_id2.toString())
}else{
onItemClickListener?.onUserClick(relation2.user_id1.toString())
}
}
holder.getView<View>(R.id.user_nav3).setOnClickListener {
if (relation3.user_id1== SpUtil.getUserId()) {
// 点击第三个用户头像
onItemClickListener?.onUserClick(relation3.user_id2.toString())
}else{
onItemClickListener?.onUserClick(relation3.user_id1.toString())
}
}
}
}
}
}
}
}
override fun convert(
holder: BaseViewHolder,
item: MultiItemEntity?
) {
val viewType = getItemViewType(holder.layoutPosition - headerLayoutCount)
when (viewType) {
TYPE_NOCP_WITH_NAME,
TYPE_NOCP_WITH_NAME_AND_LIST-> {
val noCpItem = item as RelationBean.NoCpBean
convertNoCp(holder, noCpItem, viewType)
}
else -> {
}
}
}
}