{"id":1217,"date":"2021-03-15T13:45:27","date_gmt":"2021-03-15T05:45:27","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=1217"},"modified":"2021-03-15T13:48:10","modified_gmt":"2021-03-15T05:48:10","slug":"recycleview-checkbox%e5%85%a8%e9%81%b8%e3%80%81%e5%96%ae%e9%81%b8-%e8%b3%87%e6%96%99%e4%b8%8d%e9%8c%af%e4%ba%82","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/recycleview-checkbox%e5%85%a8%e9%81%b8%e3%80%81%e5%96%ae%e9%81%b8-%e8%b3%87%e6%96%99%e4%b8%8d%e9%8c%af%e4%ba%82\/","title":{"rendered":"RecycleView  CheckBox\u5168\u9078\u3001\u55ae\u9078 \u8cc7\u6599\u4e0d\u932f\u4e82"},"content":{"rendered":"<h3>1.\u5275\u5efaAdapter<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">class MyAdapter : RecyclerView.Adapter&lt;MyAdapter.MyViewHolder&gt;() {\n\n    interface GetDataCallBack {\n        fun getDataChange(data: ArrayList&lt;Int&gt;)\n    }\n\n    fun setDataCallBack(getDataCallBack: GetDataCallBack) {\n        this.getDataCallBack = getDataCallBack\n    }\n\n    private var data = arrayListOf&lt;Data&gt;()\n    private val choices = hashMapOf&lt;Int, Boolean&gt;()\n    lateinit var getDataCallBack: GetDataCallBack\n\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =\n        MyViewHolder(\n            LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)\n        )\n\n    override fun getItemCount() = data.size\n\n    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {\n        holder.itemImage.setImageResource(data[position].image)\n        holder.itemCheck.isChecked = choices.getValue(position)\n        holder.itemCheck.setOnClickListener {\n            choices[position] = !choices[position]!!\n            notifyDataSetChanged()\n        }\n    }\n\n    \/\/\u585e\u8cc7\u6599\n    fun setData(data: ArrayList&lt;Data&gt;) {\n        this.data = data\n        data.forEachIndexed { index, _ -&gt;\n            choices[index] = false\n        }\n        notifyDataSetChanged()\n    }\n\n    \/\/\u8b80\u53d6\u52fe\u9078\u8cc7\u6599\n    fun getData() {\n        val data = arrayListOf&lt;Int&gt;()\n        choices.forEach {\n            if (it.value) {\n                data.add(it.key)\n            }\n        }\n        data.sort()\n        getDataCallBack.getDataChange(data)\n    }\n\n    \/\/\u53cd\u8f49\n    fun reverseAll() {\n        choices.entries.forEach {\n            it.setValue(!it.value)\n        }\n        notifyDataSetChanged()\n    }\n\n    \/\/\u5168\u9078\n    fun getAll() {\n        var shouldAll = false\n        choices.entries.forEach {\n            val value = it.value\n            if (!value) {\n                shouldAll = true\n                return@forEach\n            }\n        }\n        choices.entries.forEach {\n            it.setValue(shouldAll)\n        }\n        notifyDataSetChanged()\n    }\n\n    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {\n        var itemImage: ImageView = itemView.findViewById(R.id.image)\n        var itemCheck: CheckBox = itemView.findViewById(R.id.checkBox)\n    }\n}\n<\/code><\/pre>\n<h3>2.\u4f7f\u7528Adapter\u65b9\u6cd5<\/h3>\n<pre><code class=\"language-Kotlin line-numbers\">class MainActivity : AppCompatActivity() {\n\n    lateinit var myAdapter: MyAdapter\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        val binding = ActivityMainBinding.inflate(layoutInflater)\n        setContentView(binding.root)\n\n        initView(binding)\n        val data = initData()\n\n        myAdapter.setDataCallBack(object : MyAdapter.GetDataCallBack {\n            override fun getDataChange(data: ArrayList&lt;Int&gt;) {\n                Toast.makeText(this@MainActivity, data.toString(), Toast.LENGTH_SHORT).show()\n            }\n        })\n\n        myAdapter.setData(data)\n    }\n\n    private fun initData(): ArrayList&lt;Data&gt; {\n        val data = arrayListOf&lt;Data&gt;()\n        for (i in 0..15) {\n            data.add(Data(R.drawable.girl))\n        }\n        return data\n    }\n\n    private fun initView(binding: ActivityMainBinding) {\n        binding.recyclerview.apply {\n            layoutManager = LinearLayoutManager(this@MainActivity)\n            setHasFixedSize(true)\n            myAdapter = MyAdapter()\n            addItemDecoration(\n                DividerItemDecoration(\n                    this@MainActivity,\n                    DividerItemDecoration.VERTICAL\n                )\n            )\n            adapter = myAdapter\n        }\n    }\n\n    fun all(view: View) {\n        myAdapter.getAll()\n    }\n\n    fun get(view: View) {\n        myAdapter.getData()\n    }\n\n    fun reverseAll(view: View) {\n        myAdapter.reverseAll()\n    }\n}\n<\/code><\/pre>\n<h3>3.\u6548\u679c\u5c55\u793a<\/h3>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/03\/20210315_134212.gif\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2021\/03\/20210315_134212-138x300.gif\" alt=\"\" \/><\/a><\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>1.\u5275\u5efaAdapter class MyAdapter : RecyclerView.Adapter&lt;M &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[19],"tags":[13,15,24],"class_list":["post-1217","post","type-post","status-publish","format-standard","hentry","category-recyclerview-android","tag-android","tag-kotlin","tag-recyclerview"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=1217"}],"version-history":[{"count":3,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1217\/revisions"}],"predecessor-version":[{"id":1221,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/1217\/revisions\/1221"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=1217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=1217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=1217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}