package net.osmand.plus.views.controls;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.ArrayAdapter;
import java.util.HashMap;
import java.util.List;
public class StableArrayAdapter extends ArrayAdapter<Object> {
final int INVALID_ID = -1;
List<Object> objects;
List<Object> activeObjects;
HashMap<Object, Integer> mIdMap = new HashMap<>();
protected List<Drawable> dividers;
public StableArrayAdapter(Context context, int textViewResourceId, int titleId,
List<Object> objects, List<Object> activeObjects) {
super(context, textViewResourceId, titleId, objects);
updateObjects(objects, activeObjects);
}
public List<Object> getObjects() {
return objects;
}
public List<Object> getActiveObjects() {
return activeObjects;
}
public List<Drawable> getDividers() {
return dividers;
}
public boolean hasDividers() {
return dividers != null && dividers.size() > 0;
}
public void updateObjects(List<Object> objects, List<Object> activeObjects) {
this.objects = objects;
this.activeObjects = activeObjects;
refreshData();
}
private void updateIdMap() {
HashMap<Object, Integer> idMap = new HashMap<>();
for (int i = 0; i < objects.size(); ++i) {
idMap.put(objects.get(i), i);
}
mIdMap = idMap;
}
public void refreshData() {
updateIdMap();
buildDividers();
}
public void buildDividers() {
}
@Override
public Object getItem(int position) {
return objects.get(position);
}
@Override
public long getItemId(int position) {
if (position < 0 || position >= mIdMap.size()) {
return INVALID_ID;
}
Object item = getItem(position);
if (mIdMap.containsKey(item)) {
return mIdMap.get(item);
} else {
return INVALID_ID;
}
}
@Override
public boolean hasStableIds() {
return true;
}
}