I'm making a questionnaire type app in Android Studio, and I have a ListView containing items with one TextView for the question and a RadioGroup with three RadioButtons for three answers, each. Whenever I select one button in one of the items, later in the List, every few buttons get selected too. I did a little research and found that this issue is coming from Adapter reusing, but I have no idea how I could fix this issue. Any ideas?
Here is my adapter implementation:
package com.aronniki.bolyaiprojektv1;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RadioGroup;
import android.widget.TextView;
public class TesztAdapter extends BaseAdapter {
static class ViewHolderItem
{
TextView textViewItem;
RadioGroup radioGroupItem;
}
private final Context mContext;
private final String[] questions;
private final String[] valaszok;
public TesztAdapter(Context mContext, String[] questions, String[] valaszok) {
this.mContext = mContext;
this.questions = questions;
this.valaszok = valaszok;
}
@Override
public int getCount() {
return questions.length;
}
@Override
public Object getItem(int position) {
return questions[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderItem viewHolderItem;
if(convertView == null) {
final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
convertView = layoutInflater.inflate(R.layout.layout_teszt, parent, false);
viewHolderItem = new ViewHolderItem();
viewHolderItem.textViewItem = convertView.findViewById(R.id.teszt_kerdes);
viewHolderItem.radioGroupItem = convertView.findViewById(R.id.teszt_group);
convertView.setTag(viewHolderItem);
}
else {
viewHolderItem = (ViewHolderItem) convertView.getTag();
}
viewHolderItem.textViewItem.setText((String)getItem(position));
viewHolderItem.textViewItem.setTag(position);
return convertView;
}
}
You have to select or unselect your radio items every time, as you are using an adapter, it is reusing the same list item view to populate multiple list item views.
So, inside getView()
select the item, if it should be selected and unselect it, if nothing should be selected, everytime.