public
class
RoutineAdapter
extends
RecyclerView.Adapter<RoutineViewHolder> {
private
List<Routine> routines =
new
ArrayList<>();
private
RoutineViewHolder.Listener routineListener;
public
RoutineAdapter(List<Routine> routines) {
this
.routines = routines;
}
public
void
setItems(List<Routine> routines) {
this
.routines = routines;
notifyDataSetChanged();
}
public
void
updateRoutine(Routine routine) {
int
index =
this
.routines.indexOf(routine);
if
(index <
0
)
throw
new
NoSuchElementException(
"Cannot find routine "
+ routine);
this
.routines.set(index, routine);
notifyItemChanged(index);
}
public
void
setRoutineListener(RoutineViewHolder.Listener routineListener) {
this
.routineListener = routineListener;
}
@NonNull
@Override
public
RoutineViewHolder onCreateViewHolder(
@NonNull
ViewGroup parent,
int
viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_routine, parent,
false
);
return
new
RoutineViewHolder(view);
}
@Override
public
void
onBindViewHolder(
@NonNull
RoutineViewHolder holder,
int
position) {
Routine routine = routines.get(position);
holder.bind(routine, routineListener);
}
@Override
public
int
getItemCount() {
return
routines.size();
}
}
public
class
RoutineViewHolder
extends
RecyclerView.ViewHolder {
public
interface
Listener {
void
onAddItem(Routine routine);
}
private
final
TextView equipmentTxt;
private
final
Button addBtn;
private
final
RecyclerView setsRcv;
private
final
SetsAdapter adapter;
public
RoutineViewHolder(
@NonNull
View itemView) {
super
(itemView);
equipmentTxt = itemView.findViewById(R.id.equipmentTxt);
addBtn = itemView.findViewById(R.id.addBtn);
setsRcv = itemView.findViewById(R.id.setsRcv);
adapter =
new
SetsAdapter(Collections.emptyList());
setsRcv.setAdapter(adapter);
}
public
void
bind(Routine routine, Listener listener) {
equipmentTxt.setText(routine.getEquipmentName());
adapter.setItems(routine.getSetsItems());
addBtn.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
listener.onAddItem(routine);
}
});
}
}