package com.sw.dualscreen.activity import android.annotation.SuppressLint import androidx.activity.viewModels import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.LinearLayoutManager import com.sw.dualscreen.R import com.sw.dualscreen.adapter.CollectedFoodAdapter import com.sw.dualscreen.databinding.ActivityCollectedDataBinding import com.sw.dualscreen.databinding.LayoutEmptySearchBinding import com.sw.dualscreen.dialog.WarnDialog import com.sw.dualscreen.ext.addOnActionSearchListener import com.sw.dualscreen.ext.hideKeyboard import com.sw.dualscreen.objbox.CollectedFoodBean import com.sw.dualscreen.objbox.Food import com.sw.dualscreen.objbox.ObjectBox import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.UserViewModel import com.sw.plate.utils.ToastUtils import io.objectbox.Box import io.objectbox.kotlin.boxFor import kotlin.getValue class CollectedDataActivity : BaseActivity() { private val viewModel by viewModels() override fun getViewModel(): BaseViewModel { return viewModel } override fun inflateViewBinding(): ActivityCollectedDataBinding { return ActivityCollectedDataBinding.inflate(layoutInflater) } private val list: MutableList = mutableListOf() private val adapter by lazy { CollectedFoodAdapter(list).apply { isStateViewEnable = true addOnItemChildClickListener(R.id.ivDeleteFood) { _, _, position -> deleteGoods(position) } } } override fun initialize() { super.initialize() binding.rvFoodList.let { it.layoutManager = LinearLayoutManager(this) it.adapter = adapter } binding.ivBack.setOnClickListener { finish() } binding.ivGoodsSearch.setOnClickListener { val searchName = binding.etInputGoods.text.toString().trim() if (searchName.isBlank()) { ToastUtils.showToast("请输入物品名称") return@setOnClickListener } getCollectGoods(searchName) } binding.etInputGoods.let { v -> v.addOnActionSearchListener { val searchName = binding.etInputGoods.text.toString().trim() if (searchName.isBlank()) { ToastUtils.showToast("请输入物品名称") return@addOnActionSearchListener } getCollectGoods(searchName) } v.addTextChangedListener { if (it.isNullOrBlank()) { getCollectGoods() } } } getCollectGoods() } private var box: Box? = null @SuppressLint("NotifyDataSetChanged") private fun getCollectGoods(searchName:String?=null) { if (box == null) { box = ObjectBox.boxStore.boxFor(Food::class) } list.clear() var queryList = box?.all?.distinctBy { it.name } if (searchName.isNullOrBlank().not()) { queryList = queryList?.filter { it.name?.contains(searchName) == true } } queryList?.forEach { list.add(CollectedFoodBean(foodName = it.name)) } adapter.notifyDataSetChanged() if (list.isEmpty()) { loadEmptyView() } binding.root.hideKeyboard() } private var emptyBinding: LayoutEmptySearchBinding? = null private fun loadEmptyView() { if (emptyBinding == null) { emptyBinding = LayoutEmptySearchBinding.inflate(layoutInflater, binding.rvFoodList, false) } emptyBinding?.root?.let { layout -> layout.setOnClickListener { layout.hideKeyboard() } adapter.stateView = layout } } private fun deleteGoods(position: Int) { WarnDialog( context = context, content = "请确认是否删除菜品:${list[position].foodName}?", confirmBlock = { Thread { runOnUiThread { showWaitingDialog("加载中……") } val name = list[position].foodName val filterIdList = box?.all?.filter { it.name == name }?.map { it.id } box?.removeByIds(filterIdList) runOnUiThread { hideWaitingDialog() adapter.removeAt(position) ToastUtils.showToast("删除成功") if (list.isEmpty()) { loadEmptyView() } } }.start() }).show() } }