我正在尝试从Firebase获取数据并在自定义InfoWindow中显示此数据。这是我的代码:
map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter(){
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
View v = getActivity().getLayoutInflater().inflate(R.layout.info_window, null);
final TextView tv = (TextView) v.findViewById(R.id.textView);
final TextView tv2 = (TextView) v.findViewById(R.id.textView2);
nRef = new Firebase("https://mydatabase-98057.firebaseio.com/Object");
nRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("hello : "+dataSnapshot.toString());
tv.setText("Spots available : "+dataSnapshot.toString());
tv2.setText("Spots available : "+dataSnapshot.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
return v;
}
});
此代码位于void onMapReady(GoogleMap googleMap)
方法内。
事情是System.out.println()显示应该来自Firebase的数据,但TextViews不显示它,它们显示的唯一文本是“TextView”,默认情况下(它意味着文本不会更改为我从数据库中获取的新信息,就像setText没有运行或其他东西一样。)
答案 0 :(得分:0)
我怀疑问题是由InfoWindow
不是"直播视图"以及从Firebase获取数据的异步特性。 InfoWindow州的文档:
注意:绘制的信息窗口不是实时视图。观点是 在它的时候呈现为图像(使用View.draw(Canvas)) 回。这意味着对视图的任何后续更改都不会 通过地图上的信息窗口反映出来。更新信息窗口 稍后(例如,在图像加载后),调用showInfoWindow()。
在您的情况下,视图在onDataChange()
运行之前呈现并设置TextViews
的内容。请尝试遵循文档中的建议,并在showInfoWindow()
内调用onDataChange()
:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("hello : "+dataSnapshot.toString());
tv.setText("Spots available : "+dataSnapshot.toString());
tv2.setText("Spots available : "+dataSnapshot.toString());
marker.showInfoWindow(); // <== ADD THIS
}
您可能还需要制作marker
final:getInfoContents(final Marker marker)
。