Проверьте все флажки в представлении переработчика

У меня есть представление переработчика, которое получает массив и создает флажок для каждого его элемента. Я бы хотел, чтобы в верхней части окна рециркулятора был установлен флажок, который, если он установлен, также ставит все флажки в окне рециркулятора. Как я могу достичь этого?

Recycler View Adapter:

class RecyclerViewAdapter(val context: Context, val myArray: Array<String>): RecyclerView.Adapter<RecyclerViewAdapter.Holder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
        val view = LayoutInflater.from(context).inflate(R.layout.recycler_view_pattern,parent,false)
        return Holder(view)
    }

    override fun getItemCount(): Int {
       return myArray.count()
    }

    override fun onBindViewHolder(holder: Holder, position: Int) {
       return holder.bind(myArray[position])
    }

    inner class Holder(itemView: View?): RecyclerView.ViewHolder(itemView){
        val checkBox = itemView?.findViewById<CheckBox>(R.id.checkBox)

        fun bind(str: String){
            checkBox?.text = str

            checkBox?.setOnCheckedChangeListener(object : CompoundButton.OnCheckedChangeListener{
                override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
                    if (checkBox.isChecked){
                       //do something
                    }
                    else{
                        //do something
                    }
                }
            })
        }
    }
}

Шаблон просмотра Recycler:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">

<CheckBox
    android:id="@+id/checkBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#000"
    android:textSize="14sp" />
</LinearLayout>

2 ответа

Решение

Спасибо всем, кто пытался помочь, я думаю, что единственное решение для этого состоит в том, чтобы сделать еще один адаптер представления переработчика, который создает проверенные флажки и устанавливает его в представление переработчика всякий раз, когда установлен флажок Проверять все.

Основная деятельность:

checkAllCheckBox.setOnCheckedChangeListener(object : CompoundButton.OnCheckedChangeListener{
           override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
                if (p1){
                      recyclerView.adapter = RecyclerViewAdapter
                }
                else{
                      recyclerView.adapter = AllCheckedRecyclerViewAdapter
                }
            }
})

AllCheckedRecyclerViewAdapter:

inner class AllCheckedRecyclerViewAdapter(val context: Context, val myArray: Array<String>): RecyclerView.Adapter<AllCheckedRecyclerViewAdapter.Holder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
        val view = LayoutInflater.from(context).inflate(R.layout.recycler_view_pattern,parent,false)
        return Holder(view)
    }

    override fun getItemCount(): Int {
        return myArray.count()
    }

    override fun onBindViewHolder(holder: Holder, position: Int) {
        return holder.bindIng(myArray[position])
    }


    inner class Holder(itemView: View?): RecyclerView.ViewHolder(itemView){
        val checkBox = itemView?.findViewById<CheckBox>(R.id.checkBox)

        fun bind(str: String){
            checkBox?.text = str
            checkBox!!.isChecked = true


            ingCheckBox.setOnCheckedChangeListener(object : CompoundButton.OnCheckedChangeListener{
                override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {
                    //do sth
                }
            })
        }
    }
}

Создайте глобальную логическую переменную в вашем адаптере

public boolean isAllChecked = false;

Затем создайте публичный метод в своем представлении переработчика

public void setAllChecked(boolean isAllChecked) {
    this.isAllChecked = isAllChecked;
    notifyDataSetChanged;
}

Затем на активности / фрагменте вашего хоста установите проверенный измененный прослушиватель в "CHECK ALL CHECKBOX" и вызовите метод recyclerViewAdapter.setAllChecked() из этого метода, передавая логическое значение, предоставленное onCheckedChangedMethod.

Теперь отредактируйте свой метод привязки, основанный на условии isAllChecked

if(isAllChecked){
   // All Check box is checked 
} else {
   // All checkbox is not checked
}
Другие вопросы по тегам