Files
yusheng-android/MainModule/src/main/java/com/xscm/modulemain/dialog/EmotionPickerDialog.kt
梁小江 9887185133 1:添加签约房的按钮
2:我的家族和的身价页面完成
3:个性装扮降身卡完成
2025-11-26 15:52:46 +08:00

179 lines
6.1 KiB
Kotlin

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<Emotion>()
private val emotionsDeatils = mutableListOf<EmotionDeatils>()
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<List<Emotion>>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<Emotion>) {
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<TextView>(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<TextView>(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<List<EmotionDeatils>>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<EmotionDeatils>) {
if (t.isNotEmpty()) {
emotionsDeatils.addAll(t)
emotionAdapter.setNewData(emotionsDeatils)
}else{
emotionsDeatils.clear()
emotionAdapter.setNewData(emotionsDeatils)
}
}
}
)
isLoading = false
}
fun setOnEmotionSelectedListener(listener: (EmotionDeatils) -> Unit) {
onEmotionSelectedListener = listener
}
}