Проверьте все флажки в представлении переработчика
У меня есть представление переработчика, которое получает массив и создает флажок для каждого его элемента. Я бы хотел, чтобы в верхней части окна рециркулятора был установлен флажок, который, если он установлен, также ставит все флажки в окне рециркулятора. Как я могу достичь этого?
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
}