package com.xscm.modulemain.dialog import android.R import android.app.Dialog import android.content.Context import android.graphics.Color import android.view.Gravity import android.view.LayoutInflater import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.xscm.modulemain.adapter.EmotionAdapter import com.xscm.modulemain.databinding.DialogEmotionPickerBinding import com.google.android.material.tabs.TabLayout import com.tencent.qcloud.tuikit.timcommon.util.ThreadUtils import com.xscm.moduleutil.bean.room.Emotion import com.xscm.moduleutil.bean.room.EmotionDeatils import com.xscm.moduleutil.http.BaseObserver import com.xscm.moduleutil.http.RetrofitClient import io.reactivex.disposables.Disposable import retrofit2.Retrofit /** * @Author * @Time 2025/11/25 14:33 * @Description 表情类型列表 */ class EmotionPickerDialog(context: Context) : Dialog(context, com.xscm.moduleutil.R.style.BaseDialogStyleH) { private lateinit var binding: DialogEmotionPickerBinding private lateinit var emotionAdapter: EmotionAdapter private val emotions = mutableListOf() private val emotionsDeatils = mutableListOf() private var onEmotionSelectedListener: ((EmotionDeatils) -> Unit)? = null private var currentPage = 1 private var isLoading = false private var currentTab = "1" // 默认tab init { binding = DialogEmotionPickerBinding.inflate(LayoutInflater.from(context)) setContentView(binding.root) setupWindow() setupViews() // loadEmotions(currentTab, 1) } private fun setupWindow() { val window = window ?: return window.setGravity(Gravity.BOTTOM) window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) window.setBackgroundDrawableResource(android.R.color.transparent) val params = window.attributes params.windowAnimations = com.xscm.moduleutil.R.style.BaseDialogStyleH window.attributes = params } private fun setupViews() { RetrofitClient.getInstance().upEmotion(object : BaseObserver>() { override fun onSubscribe(d: Disposable) { } override fun onNext(t: List) { if (t.isNotEmpty()) { emotions.addAll(t) for (i in t) { binding.tabLayout.addTab(binding.tabLayout.newTab().setText(i.type_name)) } } } }) // 设置Tab // 在代码中设置 val tabLayout = binding.tabLayout tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab?) { // 设置选中状态的文本大小 tab?.view?.findViewById(com.google.android.material.R.id.text)?.apply { textSize = 16f setTextColor(Color.WHITE) } loadEmotions(emotions.get(tab?.position!!).id.toString(), 1); } override fun onTabUnselected(tab: TabLayout.Tab?) { // 设置未选中状态的文本大小 tab?.view?.findViewById(com.google.android.material.R.id.text)?.apply { textSize = 12f setTextColor(Color.parseColor("#999999")) } } override fun onTabReselected(tab: TabLayout.Tab?) { } }) // 设置RecyclerView emotionAdapter = EmotionAdapter() binding.rvEmotions.layoutManager = GridLayoutManager(context, 4) binding.rvEmotions.adapter = emotionAdapter // 在 setupViews() 方法中 emotionAdapter.setOnEmotionClickListener { emotion -> onEmotionSelectedListener?.invoke( emotion) dismiss() } // // 设置下拉刷新 // binding.swipeRefreshLayout.setOnRefreshListener { // loadEmotions(currentTab, 1) // } // // // 设置上拉加载更多 // binding.rvEmotions.addOnScrollListener(object : RecyclerView.OnScrollListener() { // override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { // super.onScrolled(recyclerView, dx, dy) // // val layoutManager = recyclerView.layoutManager as LinearLayoutManager // val visibleItemCount = layoutManager.childCount // val totalItemCount = layoutManager.itemCount // val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition() // // if (!isLoading && (visibleItemCount + firstVisibleItemPosition) >= totalItemCount && firstVisibleItemPosition >= 0) { // loadEmotions(currentTab, ++currentPage) // } // } // }) // 设置表情点击事件 // emotionAdapter.setOnEmotionClickListener { emotion -> // onEmotionSelectedListener?.invoke(emotion) // dismiss() // } // // // 关闭按钮 // binding.ivClose.setOnClickListener { // dismiss() // } } private fun loadEmotions(type: String, page: Int) { if (page == 1) { emotionsDeatils.clear() } isLoading = true RetrofitClient.getInstance().getEmotionDeatils(type, object : BaseObserver>() { override fun onSubscribe(d: Disposable) { } override fun onNext(t: List) { if (t.isNotEmpty()) { emotionsDeatils.addAll(t) emotionAdapter.setNewData(emotionsDeatils) }else{ emotionsDeatils.clear() emotionAdapter.setNewData(emotionsDeatils) } } } ) isLoading = false } fun setOnEmotionSelectedListener(listener: (EmotionDeatils) -> Unit) { onEmotionSelectedListener = listener } }