【发布时间】:2016-09-22 07:46:55
【问题描述】:
我有一个 (Integer; PlayerMarkerAndStatus) 对的哈希图,用于存储 Player id 和 PlayerMarkerAndStatus 对象。 PlayerMarkerAndStatus 具有在 HashMap 中指定的玩家 id 的标记和当前状态。
我还向 API 发出了 volley 请求,该请求返回了 Volley 成功案例中每个 hashmap 玩家的详细信息 - OnSuccess(Player2 nearbyPlayer)。当单击标记时,这些数据应该被发送到片段 - onMarkerClick(Marker marker)。
它比较点击的标记和哈希图中的标记。如果它们具有相同的标记 ID,它会将这个玩家的详细信息发送到片段。但是,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 从哈希图中取一个正确的标记?
【问题讨论】:
-
也显示你的 for 循环代码
-
你在哪里初始化
mMap? -
@RahulSharma 什么
for循环? -
@Pr38y,它是
onMapReady(Google googleMap)方法,基本上将地图类型分配给GoogleMap mMap-mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
标签: java android google-maps onclicklistener google-maps-api-2