android - 如何显示在回收站视图中选中的总复选框
问题描述
我正在尝试创建一个简单的 pokedex,您可以在其中跟踪您收集了多少口袋妖怪。我遇到的麻烦是recyclerview中的复选框。我想让目前为零的总数,检查每个复选框。如果不选中,数字将下降。总数只是简单地显示在文本视图中。
下面是一张图片,显示了我要解释的内容,以防我解释得不够清楚。
这是我的代码
适配器类
class MainAdapter(val pokeList : List<PokeData>) : RecyclerView.Adapter<MainAdapter.ViewHolder>() {
var totalCollectedPokemon = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainAdapter.ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val view = layoutInflater
.inflate(R.layout.poke_contents, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int = pokeList.size
override fun onBindViewHolder(holder: MainAdapter.ViewHolder, position: Int) {
val pokeDetails = pokeList[position]
holder.checkbox.setOnClickListener {
if(holder.checkbox.isChecked) {
totalCollectedPokemon = totalCollectedPokemon + 1
} else {
totalCollectedPokemon = totalCollectedPokemon - 1
}
}
holder.bind(pokeDetails)
}
inner class ViewHolder(val v: View) : RecyclerView.ViewHolder(v) {
val pokemonImage = v.findViewById<ImageView>(R.id.pokemon_image)
val pokemonName = v.findViewById<TextView>(R.id.pokemon_name)
val collectedPokemon = v.findViewById<TextView>(R.id.total_collected_pokemon)
val checkbox = v.findViewById<CheckBox>(R.id.checkBox)
fun bind(info:PokeData) {
pokemonName.text = info.pokemonName
val imageRes = v.context.resources.getIdentifier("${info.pokemonImage}", "drawable", v.context.packageName)
pokemonImage.setImageResource(imageRes)
}
}
}
我的数据类
data class PokeData(val pokemonName : String, val pokemonImage: String) {
}
解决方案
您可以在 onClick 侦听器中调用 lambda 函数来更新视图中的计数。
适配器构造函数可以更改如下:
class MainAdapter(val pokeList : List<PokeData>, val onCheckChanged: (selected: Int, total: Int) -> Unit)
并将 onClick 侦听器修改为如下内容:
holder.checkbox.setOnClickListener {
if(holder.checkbox.isChecked) {
totalCollectedPokemon = totalCollectedPokemon + 1
} else {
totalCollectedPokemon = totalCollectedPokemon - 1
}
onCheckChanged(totalCollectedPokemon,list.size)
}
在初始化适配器时的片段/活动中,您可以处理此 lambda 函数以更新文本视图。
推荐阅读
- google-sheets - 检查部分填充的行并删除其中没有数据的行
- java - Caffeine LoadingCache - 具有自定义过期策略的驱逐
- python - 如何将 if 语句应用于带有输入的数据框?
- algorithm - 如何计算给定日期的匹配数
- python - 如何在对日期进行排序和分组时避免 Typeerror
- jenkins - Jenkins Github Pull Request Builder Plugin 引发用户身份验证错误
- jmeter - 如何在 25 个并发用户的情况下以 500 个事务/秒运行负载 10 分钟?这是在 Jmeter 中实现的有效场景吗
- android - 此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。扑
- mysql - MySQL - 匹配不搜索单个字符串
- rxjs - 如何结转在 switchmap 之前可用的值?