このコードでは、Firebaseデータベースからデータを取得します。そしてそれを変数に入れました。マーカーは変数を使用して作成されます。これらの変数は、onInfoWindowClickListenerのputExtraを使って情報を渡すためにも使用されます。InfoWindowのputExtraを介してFirebase情報を渡すOnClickListener
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference();
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int ikonLokasi = 0;
for(DataSnapshot child : dataSnapshot.child("places").getChildren())
{
latitude_ = child.child("latitude").getValue(Double.class);
longitude_ = child.child("longitude").getValue(Double.class);
nama_tempat = child.child("nama").getValue(String.class);
kategori = child.child("kategori").getValue(String.class);
alamat = child.child("alamat").getValue(String.class);
harga = child.child("harga").getValue(String.class);
nomor_telepon = child.child("nomor_telepon").getValue(String.class);
.
.
.
LatLng latlng = new LatLng(latitude_, longitude_);
googleMap.addMarker(new MarkerOptions()
.position(latlng)
.title(nama_tempat)
.icon(BitmapDescriptorFactory.fromResource(ikonLokasi))
.snippet(alamat));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
.
.
.
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
return true;
}
});
googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
marker.getTitle();
Intent mainIntent = new Intent(getActivity(),DetailsActivity.class);
mainIntent.putExtra("Judul", nama_tempat);
mainIntent.putExtra("Alamat", alamat);
mainIntent.putExtra("Harga", harga);
mainIntent.putExtra("NomorTelepon", nomor_telepon);
getActivity().startActivity(mainIntent);
}
});
私の問題は、InfoWindowがクリックするたびに、情報が常にデータベースから取得した最後のデータを表示していることです。たとえば、Aの場所マーカーInfoWindowをクリックしましたが、データベースから最後にフェッチされたデータはEの場所マーカーです。したがって、DetailsActivityがgetExtras()を使用すると、Aの場所情報ではなくEの場所情報が表示されます。これはCとDのマーカーでも起こりました。それを解決する方法について
Intent detailsIntent = getIntent();
placeTitle.setText(detailsIntent.getStringExtra("Judul"));
placeAddress.setText(detailsIntent.getStringExtra("Alamat"));
placeNumber.setText(detailsIntent.getStringExtra("Harga"));
placePrice.setText(detailsIntent.getStringExtra("NomorTelepon"));
任意のアイデア:
ここDetailsActivityためのコードですか?
detailMarkerMap.put(マーカー、詳細)で詳細を取得しますOnInfoWindowClick。私にNullPointerExceptionを与えます。プライベートHashMapを変更しました。 detailMarkerMap; HashMap <マーカー、DetailsModel> detailMarkerMap =新しいHashMap <>();それがうまくいった。どうもありがとう! –
ようこそ:) +1されます;) –