这是我的目标事件:
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) {
//
}
});
您可以使用回调来实现此目标。拳头您需要创建一个接口:
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
}
});
}
});
有关更多信息,我建议您从此 post 中查看anwser,还请查看此 video 。
您可以将EventBus Libray用于此目的:https://github.com/greenrobot/eventbus在三个步骤中
- 定义事件(例如LocationReliveEvent(
- 注册订户(例如您的活动(
- 使用EventBust Post((函数发布事件