package com.alfredayibonte.questionnaireviewlib.adapters; import android.content.Context; import android.support.v7.widget.AppCompatRadioButton; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.alfredayibonte.questionnaireviewlib.R; import com.alfredayibonte.questionnaireviewlib.RadioListItemView; import com.alfredayibonte.questionnaireviewlib.models.Answer; import java.util.ArrayList; import java.util.List; /** * * Created by Alfredayibonte on 5/3/17. */ public class RadioListAdapter extends BaseAdapter{ private List<Answer> answers = new ArrayList<>(); private Context context; private RadioListAdapter.OnRadioItemClickListener listener; private RadioListItemView radioListItemView = null; public RadioListAdapter(Context context, List<Answer> answers) { this.context = context; this.answers = answers; } public RadioListAdapter(Context context, List<Answer> answers, RadioListAdapter.OnRadioItemClickListener listener) { this(context, answers); this.listener = listener; } public RadioListAdapter(List<String> answers, RadioListAdapter.OnRadioItemClickListener listener, Context context) { this(answers, context); this.listener = listener; } public RadioListAdapter(List<String> answers, Context context){ this.context = context; this.answers = new ArrayList<>(); for(String o : answers) this.answers.add(new Answer(o, false)); } public void addListener(RadioListAdapter.OnRadioItemClickListener listener){ this.listener = listener; } public interface OnRadioItemClickListener { void onRadioItemClick(List<Answer> answers); } public View getView(final int position, View convertView, ViewGroup parent) { Answer item = (Answer) getItem(position); if (convertView == null) { radioListItemView = (RadioListItemView)View.inflate(context, R.layout.radio_list_item, null); } else{ radioListItemView = (RadioListItemView)convertView; } final AppCompatRadioButton radio = (AppCompatRadioButton)radioListItemView.findViewById(R.id.radio); radio.setChecked(item.isChecked()); final TextView textView = (TextView)radioListItemView.findViewById(R.id.tv1); final RadioListItemView finalRadioListItemView = radioListItemView; textView.setText(item.getAnswer()); radioListItemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setAnswer(position, finalRadioListItemView); } }); radio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setAnswer(position, finalRadioListItemView); } }); return radioListItemView; } private void setAnswer(int position, final RadioListItemView radioListItemView){ for(Answer o : answers){ o.setChecked(false); } Answer answer = answers.get(position); answer.setChecked(true); radioListItemView.setAnswer(answer); if(listener != null) listener.onRadioItemClick(this.answers); notifyDataSetChanged(); } @Override public int getCount() { return answers.size(); } @Override public Answer getItem(int position) { return (answers == null)? null: answers.get(position); } @Override public long getItemId(int position) { return position; } public List<Answer> getAnswers () { return this.answers; } public void forceReload() { notifyDataSetChanged(); } }