1 Star 3 Fork 1

沉璧浮光/RVAdapter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ComplexFragment.kt 5.21 KB
一键复制 编辑 原始数据 按行查看 历史
沉璧浮光 提交于 2个月前 . 删除多余代码
package cbfg.rvadapter.demo.select_complex
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import cbfg.rvadapter.RVAdapter
import cbfg.rvadapter.demo.R
import cbfg.rvadapter.demo.databinding.FragmentComplexBinding
import cbfg.rvadapter.entity.CommodityItem
import cbfg.rvadapter.entity.ShopItem
import cbfg.rvadapter.selection.SelectionDelegate
class ComplexFragment : Fragment(R.layout.fragment_complex) {
private var _binding: FragmentComplexBinding? = null
private val binding: FragmentComplexBinding
get() = _binding!!
private lateinit var adapter: RVAdapter<Any>
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentComplexBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = RVAdapter<Any>(
context = view.context,
rvHolderFactory = ComplexVHFactory(),
selectionDelegate = SelectionDelegate(
multiSelectableArray = arrayOf(ShopItem::class.java, CommodityItem::class.java),
enableSelectable = true
)
).bind(binding.rvTest)
.setItems(getItems())
.setItemClickListener { _, item, position ->
adapter.toggleSelect(item, position)
if (item is ShopItem) {
onShopClick(item, position)
} else {
onCommodityClick(position)
}
count()
}
}
/**
* 点击了店铺,全选/取消全选 该店铺商品
*/
private fun onShopClick(shopItem: ShopItem, position: Int) {
val items = adapter.getItems()
//全选
if (adapter.getSelections().contains(shopItem)) {
for (j in position + 1 until adapter.itemCount) {
if (items[j] is CommodityItem) {
adapter.selectAt(j)
} else {
break
}
}
} else {
for (j in position + 1 until adapter.itemCount) {
if (items[j] is CommodityItem) {
adapter.deselectAt(j, true)
} else {
break
}
}
}
}
/**
* 点击了商品,如果该店铺下不是所有的商品都选中,要取消全选;如果该店铺下所有的商品都选中了,要设为全选
*/
private fun onCommodityClick(position: Int) {
val items = adapter.getItems()
var shopIndex = -1
var shopItem: ShopItem? = null
for (i in (position - 1) downTo 0) {
val item = items[i]
if (item is ShopItem) {
shopIndex = i
shopItem = item
break
}
}
shopItem ?: return
val selections = adapter.getSelections()
var isAllSelected = true
//判断该商店的商品是否全部被选中
for (i in (shopIndex + 1) until items.size) {
val item = items[i]
if (item !is CommodityItem) break
if (!selections.contains(item)) {
isAllSelected = false
break
}
}
//商店目前是选中状态
if (selections.contains(shopItem)) {
//如果该商店的商品不是全部被选中,要取消商店的选中
if (!isAllSelected) {
adapter.deselect(shopItem, true)
}
} else if (isAllSelected) {
//商店目前不是选中状态
//如果该商店的商品被全部选中,要设置商店的选中
adapter.selectAt(shopIndex)
}
}
/**
* 计算金额
*/
private fun count() {
var count = 0F
adapter.getSelections().forEach { selection ->
if (selection is CommodityItem) {
count += selection.price
}
}
binding.tvCount.text = String.format("总计:¥ %.2f", count)
}
private fun getItems(): List<Any> {
return arrayListOf(
ShopItem(R.mipmap.ic_launcher_round, "依依得衣服装店"),
CommodityItem(R.mipmap.ic_launcher, "长袖连衣裙", 95F),
CommodityItem(R.mipmap.ic_launcher, "衬衫裙", 85F),
CommodityItem(R.mipmap.ic_launcher, "背带裤", 40F),
ShopItem(R.mipmap.ic_launcher_round, "小米官方商店"),
CommodityItem(R.mipmap.ic_launcher, "小米手机", 899F),
CommodityItem(R.mipmap.ic_launcher, "充电宝", 50F),
ShopItem(R.mipmap.ic_launcher_round, "乐淘百货"),
CommodityItem(R.mipmap.ic_launcher, "32包竹浆本色抽纸", 27.9F),
CommodityItem(R.mipmap.ic_launcher, "毛毛虫童鞋", 79.9F),
CommodityItem(R.mipmap.ic_launcher, "花生酥516g", 32.8F)
)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Android
1
https://gitee.com/cbfg5210/RVAdapter.git
git@gitee.com:cbfg5210/RVAdapter.git
cbfg5210
RVAdapter
RVAdapter
master

搜索帮助