这是我的目标事件:
refDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
LatLng newlocation = new LatLng(dataSnapshot.child("latitude").getValue(Double.class),dataSnapshot.child("longitude").getValue(Double.class));
nama = new String(dataSnapshot.child("nama").getValue(String.class));
kec = new String(dataSnapshot.child("kecamatan").getValue(String.class));
kab = new String(dataSnapshot.child("kebupaten").getValue(String.class));
googleMap.addMarker(new MarkerOptions().position(newlocation).title(nama+", "+kec+", "+kab));
}
});
如何获取对象newlocation
并将其放入此事件中:
tampil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
}
});
答案 0 :(得分:1)
您可以使用回调来实现此目的。你需要创建一个界面:
public interface MyCallback {
void onCallback(LatLng newlocation);
}
然后,您需要创建一个实际从数据库获取数据的方法。此方法应如下所示:
public void readData(MyCallback myCallback) {
refDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
newlocation = new LatLng(dataSnapshot.child("latitude").getValue(Double.class),dataSnapshot.child("longitude").getValue(Double.class));
nama = new String(dataSnapshot.child("nama").getValue(String.class));
kec = new String(dataSnapshot.child("kecamatan").getValue(String.class));
kab = new String(dataSnapshot.child("kebupaten").getValue(String.class));
googleMap.addMarker(new MarkerOptions().position(newlocation).title(nama+", "+kec+", "+kab));
myCallback.onCallback(newlocation);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
最后,只需调用readData()
方法并在MyCallback
方法中将onClick()
接口的实例作为参数传递,如下所示:
tampil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
readData(new MyCallback() {
@Override
public void onCallback(LatLng newlocation) {
//Do what you need to do with newlocation
}
});
}
});
答案 1 :(得分:0)
您可以为此目的使用EventBus libray:https://github.com/greenrobot/EventBus分三个步骤