添加了副屏显示逻辑控制
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
package com.sw.dualscreen.view
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.sw.dualscreen.R
|
||||
import com.sw.dualscreen.adapter.GenericItemAdapter
|
||||
@@ -17,8 +17,15 @@ import com.sw.dualscreen.adapter.dpToPx
|
||||
import com.sw.dualscreen.databinding.BottomSheetDialogBinding
|
||||
import com.sw.dualscreen.databinding.ItemSearchFoodInfoBinding
|
||||
import com.sw.dualscreen.model.response.FoodInfo
|
||||
import com.sw.dualscreen.utils.Debouncer
|
||||
import com.sw.dualscreen.viewmodel.UserViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
|
||||
class CustomBottomSheetDialog : BottomSheetDialogFragment() {
|
||||
class CustomBottomSheetDialog(
|
||||
val viewModel: UserViewModel,
|
||||
val itemClickCallback: (FoodInfo) -> Unit
|
||||
) : BottomSheetDialogFragment() {
|
||||
private lateinit var binding: BottomSheetDialogBinding
|
||||
private lateinit var adapter: GenericItemAdapter<FoodInfo, ItemSearchFoodInfoBinding>
|
||||
private var checkedItem: FoodInfo? = null
|
||||
@@ -34,9 +41,12 @@ class CustomBottomSheetDialog : BottomSheetDialogFragment() {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val debouncer = Debouncer(3000)
|
||||
initView()
|
||||
binding.ivSearch.setOnClickListener {
|
||||
|
||||
debouncer.debounce {
|
||||
viewModel.searchByFoodName(binding.etSearch.text.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,8 +73,11 @@ class CustomBottomSheetDialog : BottomSheetDialogFragment() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun newInstance(): CustomBottomSheetDialog {
|
||||
return CustomBottomSheetDialog()
|
||||
fun newInstance(
|
||||
viewModel: UserViewModel,
|
||||
itemClickCallback: (FoodInfo) -> Unit
|
||||
): CustomBottomSheetDialog {
|
||||
return CustomBottomSheetDialog(viewModel, itemClickCallback)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,28 +88,20 @@ class CustomBottomSheetDialog : BottomSheetDialogFragment() {
|
||||
binding.recyclerview.addItemDecoration(
|
||||
GridSpacingItemDecoration(
|
||||
spanCount = 2,
|
||||
spacing = requireContext().dpToPx(6),
|
||||
spacing = requireContext().dpToPx(30),
|
||||
includeEdge = false // 包含边缘间距
|
||||
)
|
||||
)
|
||||
binding.recyclerview.adapter = adapter
|
||||
binding.recyclerview.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 lastVisibleItem = layoutManager.findLastVisibleItemPosition()
|
||||
val totalItems = layoutManager.itemCount
|
||||
registerDataChange()
|
||||
}
|
||||
|
||||
// if (!viewModel.isLoading && viewModel.canLoadMore
|
||||
// && lastVisibleItem >= totalItems - 3
|
||||
// ) {
|
||||
// viewModel.getSearchMemberList(
|
||||
// param = lastText,
|
||||
// pageNum = viewModel.currentPage
|
||||
// )
|
||||
// }
|
||||
private fun registerDataChange() {
|
||||
lifecycleScope.launch {
|
||||
viewModel.searchFoodInfoList.collect {
|
||||
adapter.updateData(it)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
private fun createAdapter(): GenericItemAdapter<FoodInfo, ItemSearchFoodInfoBinding> {
|
||||
@@ -104,20 +109,30 @@ class CustomBottomSheetDialog : BottomSheetDialogFragment() {
|
||||
items = emptyList(),
|
||||
bindingInflater = ItemSearchFoodInfoBinding::inflate,
|
||||
bindCallback = { item, position ->
|
||||
// this.tvName.text = item.name.maskName()
|
||||
// this.tvPhone.text = item.phone.maskPhone()
|
||||
// if (item.id != checkedItem?.id) {
|
||||
// this.llRoot.setBackgroundResource(R.drawable.grid_item_bind)
|
||||
// } else {
|
||||
// this.llRoot.setBackgroundResource(R.drawable.grid_item_unbind)
|
||||
// }
|
||||
//
|
||||
// this.llRoot.setOnClickListener {
|
||||
// Timber.d("itemClick ${item.name}, position = $position")
|
||||
// checkedItem = item
|
||||
// adapter.notifyDataSetChanged()
|
||||
// }
|
||||
this.tvName.text = item.foodName
|
||||
if (item.id != checkedItem?.id) {
|
||||
this.tvName.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
|
||||
this.tvName.setTextColor(resources.getColor(R.color.search_normal))
|
||||
this.llRoot.setBackgroundResource(R.drawable.grid_search_item_normal)
|
||||
} else {
|
||||
this.tvName.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
|
||||
this.tvName.setTextColor(resources.getColor(R.color.search_checked))
|
||||
this.llRoot.setBackgroundResource(R.drawable.grid_search_item_checked)
|
||||
}
|
||||
|
||||
this.llRoot.setOnClickListener {
|
||||
Timber.d("itemClick ${item.foodName}, position = $position")
|
||||
checkedItem = item
|
||||
// viewModel.updateCurrentItem(item)
|
||||
itemClickCallback(item)
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun dismiss() {
|
||||
viewModel.cleanSearchFoodInfoList()
|
||||
super.dismiss()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user