首页 > 解决方案 > 如何显示在回收站视图中选中的总复选框

问题描述

我正在尝试创建一个简单的 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) {

}

标签: androidkotlinandroid-recyclerviewandroid-checkbox

解决方案


您可以在 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 函数以更新文本视图。


推荐阅读