package de.avalax.fitbuddy.presentation.edit.workout; import android.content.Context; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.List; import javax.inject.Inject; import de.avalax.fitbuddy.R; import de.avalax.fitbuddy.domain.model.exercise.Exercise; import de.avalax.fitbuddy.presentation.FitbuddyApplication; import de.avalax.fitbuddy.presentation.helper.ExerciseViewHelper; public class ExerciseAdapter extends ArrayAdapter<Exercise> { private List<Exercise> exercises; @Inject ExerciseViewHelper exerciseViewHelper; private int textViewResourceId; public ExerciseAdapter(Context context, int textViewResourceId, List<Exercise> exercises) { super(context, textViewResourceId, exercises); this.textViewResourceId = textViewResourceId; ((FitbuddyApplication) context.getApplicationContext()).getComponent().inject(this); this.exercises = exercises; } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { Exercise exercise = exercises.get(position); if (convertView == null) { View newConvertView = createConvertView(parent); newConvertView.setTag(createViewHolder(newConvertView, exercise)); return newConvertView; } ExerciseViewHolder holder = (ExerciseViewHolder) convertView.getTag(); holder.setFromExercise(exercise); return convertView; } @NonNull private ExerciseViewHolder createViewHolder(View convertView, Exercise exercise) { ExerciseViewHolder holder = new ExerciseViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.exercise_title); holder.weight = (TextView) convertView.findViewById(R.id.weightTextView); holder.reps = (TextView) convertView.findViewById(R.id.repsTextView); holder.sets = (TextView) convertView.findViewById(R.id.setsTextView); holder.setFromExercise(exercise); return holder; } private View createConvertView(@NonNull ViewGroup parent) { String inflaterService = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater vi = (LayoutInflater) getContext().getSystemService(inflaterService); return vi.inflate(textViewResourceId, parent, false); } class ExerciseViewHolder { public TextView name; public TextView weight; public TextView sets; public TextView reps; void setFromExercise(Exercise exercise) { name.setText(exerciseViewHelper.nameOfExercise(exercise)); weight.setText(exerciseViewHelper.weightOfExercise(exercise)); reps.setText(String.valueOf(exerciseViewHelper.maxRepsOfExercise(exercise))); sets.setText(String.valueOf(exerciseViewHelper.setCountOfExercise(exercise))); } } }