Recyclerview 复选框保持选中状态有问题吗?

Pad*_*i S 2 android kotlin android-recyclerview

我正在使用带有复选框的自定义 recyclerview 适配器,以便用户可以选择多个选中的项目。

一开始,我在向下滚动时面临重复的复选框选择,因此我添加了一个位置数组来保持复选框选择为 true 或 false。现在重复的复选框选择问题消失了,但在向下滚动时选定的复选框被取消选择。下面给出了我的 recyclerview adpater,

class IngredientsAdapter(var context: Context?,var activity: Activity, var ingredientList:ArrayList<String>, var imageID:Int):
        RecyclerView.Adapter<IngredientsAdapter.IngredientViewHolder>() {
    private var positionArray:ArrayList<Boolean> = ArrayList(ingredientList.size)
    private val selectedList=ArrayList<String>()
    init {
        for (i in ingredientList.indices) {
            positionArray.add(false)
        }
    }

    override fun onCreateViewHolder(p0: ViewGroup, p1: Int): IngredientViewHolder {
        val layoutInflater = LayoutInflater.from(p0.context)
        return (IngredientsAdapter.IngredientViewHolder(layoutInflater.inflate(R.layout.ingredient_list_row,p0,false)))
    }

    override fun getItemCount(): Int {
       return ingredientList.size
    }
    override fun onBindViewHolder(p0: IngredientViewHolder, p1: Int) {


        p0.imageView.setImageResource(imageID)
        p0.textView.text = ingredientList[p1]
        p0.checkBox.isChecked = positionArray[p1]
        val sharedPreferences= SharedPreferenceHelper(context, SystemConstants.SHARED_PREFS_CHECKDATA)
        val checked=sharedPreferences.getPrefsBooleanValue(ingredientList[p1])
        p0.checkBox.isChecked = checked
        p0.checkBox.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
            if(isChecked){
                positionArray[p1] = true
                selectedList.add(ingredientList[p1])
                ingredientList.get(p1)
                sharedPreferences.addPrefsBooleanVal(ingredientList[p1],true)
                Log.d("debug","selecteditem==>$selectedList")
            }else{
                positionArray[p1] = false
                selectedList.remove(ingredientList[p1])
                sharedPreferences.addPrefsBooleanVal(ingredientList[p1],false)
                Log.d("debug","selecteditem==>$selectedList")
            }
        })
    }

    class IngredientViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var textView= itemView.txt_row!!
        var imageView= itemView.image_view!!
        var checkBox= itemView.chk_row!!
    }
}
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏。

jay*_*kay 6

OnClickListener滑动时不起作用Switch

由于RecyclerView是回收视图,因此在为新项目OnCheckedChangeListener设置检查值时可以触发先前附加的视图。Switch

将新数据绑定到项目时:

   switch.setOnCheckedChangeListener(null) // remove any existing listener from recycled view
   switch.isChecked = [true/false] // will no longer trigger any callback to listener
   switch.setOnCheckedChangeListener { btnView, isChecked ->
       // do exiting stuff
   }
Run Code Online (Sandbox Code Playgroud)