我的目的是显示片段是否有要展示的内容,如果没有,则隐藏它。
我的问题是,给定相同的坐标:
mStreetView.getStreetViewPanorama().getLocation()
具有非空响应并显示视图。但是,Fragment
为黑色(空白)。mStreetView.getStreetViewPanorama().getLocation()
的响应为空,视图保持隐藏状态。我的代码:
mStreetView.getView().setVisibility(View.GONE);
mStreetView.getStreetViewPanorama().setPosition(customMarker.getPosition());
if (mStreetView.getStreetViewPanorama().getLocation() != null &&
mStreetView.getStreetViewPanorama().getLocation().links != null) {
mStreetView.getView().setVisibility(View.VISIBLE);
}
我不确定如何调试这个。在我看来,结果不应该像这样变化,特别是因为,即使它具有非空结果,结果(显然)没有有效值来允许显示某些东西。
编辑:
此坐标按预期运行,并显示正确填充的视图:33.6645598,-111.9253126
此坐标显示视图,但它是黑色,然后返回null:33.6492448,-111.9354228
这些结果是一致的。
EDIT2:
我尝试使用OnStreetViewPanoramaReadyCallback()
,但结果是一样的。
现在代码:
mStreetView.getView().setVisibility(View.GONE);
mStreetView.getStreetViewPanoramaAsync(new OnStreetViewPanoramaReadyCallback() {
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
streetViewPanorama.setPosition(customMarker.getPosition());
if (streetViewPanorama.getLocation() != null && streetViewPanorama.getLocation().links != null) {
mStreetView.getView().setVisibility(View.VISIBLE);
}
}
});
答案 0 :(得分:0)
在我的一个旧项目中发现,如果您尝试过早访问该位置,则存在竞争条件
我所做的是设置一个处理程序并在1000毫秒后发布延迟的可运行的火灾,然后检查位置。这样做可以提供一致的结果。
我不知道这是否仍然是当前的行为,但你可以阅读我在这里做的事情
Android StreetView check if there is any view for given location
修改
现在似乎有一个onStreetViewPanoramaReady
回调,您使用的是吗?
答案 1 :(得分:0)
如果在创建视图之前使用'getLocation()',它将返回null。建议等到视图创建完毕。此外,您必须create a callback告知您街景何时准备就绪。
getStreetViewPanoramaAsync(new OnStreetViewPanoramaReadyCallback(){
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
}
})