【发布时间】:2017-06-01 05:30:53
【问题描述】:
所以我有这段代码可以从我的 Firebase 数据库中获取数据。然后,我把它放在变量中。使用变量制作标记。这些变量也将被使用,通过 onInfoWindowClickListener 中的 putExtra 传递信息。
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 的地点标记信息窗口,但最后从数据库中获取的数据是 E 的地点标记。所以当 DetailsActivity 使用 getExtras() 时,它会显示 E 的位置信息,而不是 A 的。这也发生在 C 和 D 的标记处。
这是 DetailsActivity 的代码:
Intent detailsIntent = getIntent();
placeTitle.setText(detailsIntent.getStringExtra("Judul"));
placeAddress.setText(detailsIntent.getStringExtra("Alamat"));
placeNumber.setText(detailsIntent.getStringExtra("Harga"));
placePrice.setText(detailsIntent.getStringExtra("NomorTelepon"));
关于如何解决它的任何想法?
【问题讨论】:
标签: android google-maps android-intent firebase-realtime-database infowindow