Writing MarkerInfoWindow for osmdroid
The bottom line is that when you click on the marker, some data is taken from the object, other data is loaded from the API, written to the application database, and then displayed in the InfoWindow object.
We start by creating an xml file with infoWindow description, add fields with the headers of the transport criteria.

MarkerInfoWindow allows you to record in Title, Description, Subdescription, I used only Descripton for all the necessary records. We will subsequently transfer the data there as a string with hyphens.
public class CarInfoWindow extends MarkerInfoWindow {
Car mCar;
Marker mMarker;
CarInfoTask carInfoTask;
Boolean stopped = false;
Drawable icon;
String active;
public CarInfoWindow(int layoutResId, MapView mapView) {
super(layoutResId, mapView);
}
//при открытии запускаем asyncTask
@Override
public void onOpen(final Object item) {
if (!stopped) {
carInfoTask = new CarInfoTask();
carInfoTask.execute(item);
}
super.onOpen(item);
}
//при закрытии можем поменять иконку маркера
@Override
public void onClose() {
stopped = false;
super.onClose();
if (!(mCar.getLastUpdate() == null)) {
if (((System.currentTimeMillis() - Long.parseLong(mCar.getLastUpdate())) / 3600000) > 1) {
active = "0"; //car is not active
}
else {
active = "1";
}
}
String fileName = Environment.getExternalStorageDirectory()+"/automap/cars/icons/"+mCar.getIconIndex()+"/"+active+"/icon.png";
icon = Utils.loadIcon(fileName, Float.parseFloat(mCar.getDirection()), mCar.getIconType());
mMarker.setIcon(icon);
}
class CarInfoTask extends AsyncTask
Теперь при создании маркера остается всего лишь к маркеру привязать нужное окно
marker.setInfoWindow(infoWindow);
В результате проделанных манипуляций получаем нечто вроде:

P.S. Несмотря на то, что маркер — иконка грузовика, а в описании это Alfa Romeo, всё работает верно.