У меня есть hashmap пары (Integer; PlayerMarkerAndStatus) для хранения идентификатора игрока и объекта PlayerMarkerAndStatus. PlayerMarkerAndStatus имеет маркер и текущий статус для идентификатора игрока, указанного в HashMap.Как заставить OnclickListener работать внутри цикла?
У меня также есть запрос волейбола к API, который возвращает детали каждого игрока хэш-карты на случай успеха Volley - OnSuccess(Player2 nearbyPlayer)
. Предполагается, что эти данные будут отправлены фрагменту при щелчке маркера - onMarkerClick(Marker marker)
.
Он сравнивает маркер щелчка и маркер от хэш-карты. Если у них одинаковые идентификаторы маркера, он отправляет детали этого игрока в фрагмент. Тем не менее, OnMarkerClickListener берет только последний маркер HashMap для сравнения с щелчком маркера.
Это мой код ниже:
for (final Map.Entry<Integer, PlayerMarkerAndStatus> e :
player_id_marker_status.entrySet()) {
Log.d(LOG_TAG, "marker id of current entry: " + e.getValue().getMarker().getId());
getNearbyPlayerDetails(new VolleyCallbackNearbyPlayerDetails() {
@Override
public void onSuccess(final Player2 nearbyPlayer) {
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Log.d(LOG_TAG, "clicked marker id: " + marker.getId());
Log.d(LOG_TAG, "current marker id: " + e.getValue().getMarker().getId());
if (marker.getId().equals(e.getValue().getMarker().getId())) {
Log.d(LOG_TAG, "marker clicked. Player id: " + e.getKey());
PlayerDetailsFragment playerDetailsFragment =
new PlayerDetailsFragment();
Bundle bundle = new Bundle();
bundle.putString("player_details_username",
nearbyPlayer.getSurname());
if (nearbyPlayer.getType() == -1)
bundle.putString("player_details_type", "a");
else {
bundle.putString("player__details_type", "b");
}
bundle.putInt("player_details_health",
nearbyPlayer.getHealth());
playerDetailsFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.add(R.id.player_details_fragment_container,
playerDetailsFragment).commit();
return true;
}
return false;
}
});
}
}, e.getKey());
}
Журналы HashMap:
09-22 11:37:42.410 23553-23553/com.orujzade.asdf D/MainActivity: marker id of current entry: m3
09-22 11:37:42.415 23553-23553/com.orujzade.asdf D/MainActivity: marker id of current entry: m2
09-22 11:37:42.415 23553-23553/com.orujzade.asdf D/MainActivity: marker id of current entry: m1
Журналы по маркеру мыши:
09-22 11:39:15.353 23553-23553/com.orujzade.asdf D/MainActivity: clicked marker id: m3
09-22 11:39:15.353 23553-23553/com.orujzade.asdf D/MainActivity: current marker id: m1
09-22 11:39:20.593 23553-23553/com.orujzade.asdf D/MainActivity: clicked marker id: m2
09-22 11:39:20.593 23553-23553/com.orujzade.asdf D/MainActivity: current marker id: m1
09-22 11:39:25.593 23553-23553/com.orujzade.asdf D/MainActivity: clicked marker id: m4
09-22 11:39:25.593 23553-23553/com.orujzade.asdf D/MainActivity: current marker id: m1
Как я могу сделать OnMarkerClickListener
взять правильный маркер из хэшмап?
показать ваш код для слишком –
петли, где вы инициализация '' MMAP? – Pr38y
@RahulSharma, что за 'цикл? – korujzade