I'm implementing a Customizable Adapter with TextView, EditText and CheckBox. I managed to make all the items appear in my RecycleView, however when checking a checkbox, for example, another checkbox for an item below is also checked, the same occurs with editing EditText, when changing the value of an item one another one on the list is also changed by the same value. I don't know how I can avoid this situation, since I performed the seemingly correct implementation of the viewholder, follow the code below the implementation:
RecycleView:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActivityListaDisciplinaDiario">
<android.support.v7.widget.RecyclerView
android:id="@+id/lista_bncc"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Layout Adapter:
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:textStyle="bold"
android:text="Código BNCC:"
android:textSize="18sp" />
<TextView
android:id="@+id/txt_bncc"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="18sp"
android:paddingLeft="15dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:textStyle="bold"
android:text="Descrição:"
android:textSize="18sp" />
<TextView
android:id="@+id/txt_descricao_bncc"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="18sp"
android:paddingLeft="15dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:textStyle="bold"
android:text="Tempo:"
android:textSize="18sp" />
<EditText
android:id="@+id/timer"
android:inputType="number"
android:hint="tempo de aula"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end">
<CheckBox
android:layout_gravity="end"
android:id="@+id/checkbox_bncc"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
Activity Code:
lista = response.body();
Adapter_Lista_Bncc adapter = new Adapter_Lista_Bncc(lista, ActivityListaBNCC.this);
lista_bncc.setAdapter(adapter);
RecyclerView.LayoutManager layout = new LinearLayoutManager(ActivityListaBNCC.this,
LinearLayoutManager.VERTICAL, false);
lista_bncc.setLayoutManager(layout);
Adapter Implementation Code:
public class Adapter_Lista_Bncc extends RecyclerView.Adapter {
private List<Pesquisa> lista;
private Context context;
public Adapter_Lista_Bncc(List<Pesquisa> lista, Context context){
this.lista = lista;
this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.adapter_lista_bncc, viewGroup, false);
NossoViewHolder holder = new NossoViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
NossoViewHolder holder = (NossoViewHolder) viewHolder;
Pesquisa p = lista.get(i);
holder.txt_bncc.setText(p.getVar1());
holder.txt_descricao_bncc.setText(p.getVar2());
holder.timer.setFilters(new InputFilter[]{new MinMaxFilter("1", "60")});
}
@Override
public int getItemCount() {
return lista.size();
}
public class NossoViewHolder extends RecyclerView.ViewHolder{
final TextView txt_bncc;
final TextView txt_descricao_bncc;
final EditText timer;
final CheckBox check;
public NossoViewHolder(View v){
super(v);
txt_bncc = (TextView) v.findViewById(R.id.txt_bncc);
txt_descricao_bncc = (TextView) v.findViewById(R.id.txt_descricao_bncc);
timer = (EditText) v.findViewById(R.id.timer);
check = (CheckBox) v.findViewById(R.id.checkbox_bncc);
}
}
}
I am available to provide more information about the situation, I thank you for your attention and anyone who can help.