选中状态切换

This commit is contained in:
renhaoting 2025-11-26 11:22:22 +08:00
parent 3ff778132a
commit 993b2bf5e0
4 changed files with 68 additions and 16 deletions

View File

@ -5,10 +5,13 @@ import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignBinding import com.gamedog.vididin.databinding.DialogDailySignBinding
import com.gamedog.vididin.manager.TaskManager import com.gamedog.vididin.manager.TaskManager
import com.gamedog.vididin.widget.DailySignItemView
class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) { class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) {
private var mDataList: List<RewardDetail>? = emptyList() private var mDataList: List<RewardDetail>? = emptyList()
private var mSignItemList: MutableList<DailySignItemView> = mutableListOf()
init { init {
build() build()
@ -42,21 +45,34 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
private fun initDailySignItems() { private fun initDailySignItems() {
with(mBinding) { with(mBinding) {
mDataList?.size?.let { signItem7.setLargeWidthMode()
if (it >= 7) {
signItem1.setData(mDataList!![0]) mSignItemList.add(signItem1)
signItem2.setData(mDataList!![1]) mSignItemList.add(signItem2)
signItem3.setData(mDataList!![2]) mSignItemList.add(signItem3)
signItem4.setData(mDataList!![3]) mSignItemList.add(signItem4)
signItem5.setData(mDataList!![4]) mSignItemList.add(signItem5)
signItem6.setData(mDataList!![5]) mSignItemList.add(signItem6)
signItem7.setData(mDataList!![6]) mSignItemList.add(signItem7)
mDataList?.let {
mSignItemList.forEachIndexed { index, itemView->
itemView.setData(mDataList!![index], { isSelected ->
handleItemSelectStateChanged(index, isSelected)
})
}
}
} }
} }
signItem7.setLargeWidthMode() private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) {
mSignItemList.forEachIndexed { index, itemView ->
if (itemIndex != index) {
itemView.setSelectState(false)
} }
} }
}
private fun handleRightButClicked() { private fun handleRightButClicked() {

View File

@ -5,6 +5,7 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import com.ama.core.architecture.util.setOnClickBatch
import com.gamedog.vididin.R import com.gamedog.vididin.R
import com.gamedog.vididin.databinding.DailySignItemBinding import com.gamedog.vididin.databinding.DailySignItemBinding
import com.gamedog.vididin.main.fragments.task.RewardDetail import com.gamedog.vididin.main.fragments.task.RewardDetail
@ -17,20 +18,32 @@ class DailySignItemView @JvmOverloads constructor(
) : LinearLayout(context, attrs, defStyleAttr) { ) : LinearLayout(context, attrs, defStyleAttr) {
private lateinit var mData: RewardDetail private lateinit var mData: RewardDetail
private lateinit var mBinding: DailySignItemBinding private var mBinding: DailySignItemBinding
private var mIsSelected = false
private var mSelectStateCallback: ((isSelected: Boolean)->Unit)? = null
init { init {
mBinding = DailySignItemBinding.inflate(LayoutInflater.from(context), this, true) mBinding = DailySignItemBinding.inflate(LayoutInflater.from(context), this, true)
mBinding.run { mBinding.run {
setOnClickBatch(contentRoot) {
when(this) {
contentRoot -> {
if (!mIsSelected) {
setSelectState(true)
mSelectStateCallback?.invoke(mIsSelected)
}
}
}
}
} }
} }
fun setData(data: RewardDetail) { fun setData(data: RewardDetail, selectStateCallback: (isSelected: Boolean)->Unit) {
mData = data mData = data
mSelectStateCallback = selectStateCallback
mBinding.tvGoldNum.text = "" + mData.value mBinding.tvGoldNum.text = "" + mData.value
mBinding.tvDayNum.text = context.getString(R.string.day) + " "+ mData.day mBinding.tvDayNum.text = context.getString(R.string.day) + " "+ mData.day
} }
@ -40,6 +53,17 @@ class DailySignItemView @JvmOverloads constructor(
mBinding.ivBg.setImageResource(R.mipmap.bg_biginner_daily_large) mBinding.ivBg.setImageResource(R.mipmap.bg_biginner_daily_large)
} }
fun setSelectState(isSelect: Boolean) {
mIsSelected = isSelect
if (mIsSelected) {
mBinding.rlRoot.setBackgroundResource(R.drawable.bg_daily_sign_day_item)
} else {
mBinding.rlRoot.background = null
}
}
} }

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="2dp" android:color="#ffff0000" />
<corners android:topLeftRadius="8dp" android:topRightRadius="8dp" android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp" />
</shape>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_root"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
@ -8,8 +9,10 @@
> >
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:id="@+id/rl_root"
android:layout_height="wrap_content"> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_bg" android:id="@+id/iv_bg"