Files
yusheng-android/MainModule/src/main/java/com/xscm/modulemain/adapter/BosomFriendAdapter.kt

339 lines
16 KiB
Kotlin
Raw Normal View History

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 -> {
}
}
}
}