Пишу кастомный адаптер, унаследованный от BaseExpandableListAdapter для заполнения ExpandableListView. В адаптер передаётся коллекция HashMap, ключём в которой является объект. Это не специально, так получилось т.к. я захотел что бы у заголовков групп был не только текст, но и картинка. И простой int или String в качестве ключа уже не подходит. Соответственно получилось:
Адаптер
Код: Выделить всё
public class AddMusclesToExerciseAdapter extends BaseExpandableListAdapter {
Context ctx;
Map<MuscleGroup,List<Muscle>> musclesByGroups=new HashMap<>();
public AddMusclesToExerciseAdapter(Context context, Map<MuscleGroup, List<Muscle>> inputMap){
ctx=context;
musclesByGroups=inputMap;
}
@Override
public int getGroupCount() {
return musclesByGroups.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 0;
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
return null;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
return null;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
- getChildrenCount
- getGroup
- getChild
- getGroupId
- getChildId
- isChildSelectable
А в некоторых ещё и int childPosition, но с этим по идее понятно. Ведь значениями у ключей моей HashMap является коллекция, реализующая интерфейс List, там "на первый-второй рассчитайся" можно сделать, перечисляемая коллекция.
Но у меня нет номера ключа коллекции HashMap, откуда его взять вообще?
Класс объектов, используемого в качестве ключа - MuscleGroup
Код: Выделить всё
public class MuscleGroup {
private int id;
private String name;
private int power;
private byte[] img;
private String description;
public MuscleGroup(int id, String name, int power, byte[] img, String description) {
this.id = id;
this.name = name;
this.power = power;
this.img = img;
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getId() {return id;}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public byte[] getImg() {
return img;
}
public void setImg(byte[] img) {
this.img = img;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
@Override
public int hashCode(){
return getId();
}
@Override
public boolean equals(Object o) {
if ((o!=null) && (o instanceof MuscleGroup)) {
if (this.getId()==((MuscleGroup) o).getId()) return true;
}
return false;
}
}
В кратце, как нумеровать ключи в HasMap?