私は、プレーヤーIDとPlayerMarkerAndStatusオブジェクトを格納するための(Integer; PlayerMarkerAndStatus)ペアのhashmapを持っています。 PlayerMarkerAndStatusには、マーカーと、HashMapで指定されたプレーヤーIDの現在のステータスがあります。OnclickListenerをforループ内で正しく動作させる方法は?
また、Volley - OnSuccess(Player2 nearbyPlayer)
の成功時にハッシュマップの各プレーヤーの詳細を返すAPIへのボレーリクエストがあります。これらのデータは、マーカーがクリックされたときにフラグメントに送信されると想定されます。onMarkerClick(Marker marker)
クリックされたマーカーとハッシュマップのマーカーを比較します。マーカーIDが等しい場合は、このプレイヤーの詳細をフラグメントに送信します。ただし、OnMarkerClickListenerは、クリックされたマーカーと比較するためにHashMapの最後のマーカーのみを取ります。
それは以下の私のコードです: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());
}
ログ:マーカーをクリックしたときに、
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どのfor forループ? – korujzade