- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我开始研究在 InfoWindow 中显示位置图像的 InfoWindowAdapter。我有很多不同的位置,因此位置图像可能在手机上不可用,而是从网络上下载的。
现在 Maps API 声明如下:
Note that a snapshot of the returned view will be taken and then rendered on the map so subsequent changes to the view will not be reflected by the info window on the map. To update the info window (e.g., after an image has loaded), just call showInfoWindow() and the view will be updated.
据我了解,我需要跟踪创建要更新的信息窗口的标记,并在加载图像后调用 showInfoWindow。我有一个 ImageDownloadService,它将接收一个处理程序,如果图像加载完成,该处理程序会收到通知。
如果图像加载时间稍长,则可能是用户打开了另一个 InfoWindow 或关闭了滚动离开的当前窗口。问题是,当我再次调用标记上的 showInfoWindow 来更新 View 时,我无法确定 InfoWindow 是否仍然显示。
有没有办法只在 InfoWindow 仍然显示时更新它?
最佳答案
我刚刚在 AsyncTask
下载和更新 InfoWindow
时遇到了类似的问题,今天早上我的头撞到墙上后,我出现了有了这个小变通办法,在 Google 解决这个问题之前,它有望满足您的需求。
我在 AsyncTask
的 OnPostExecute()
方法中调用了 marker.showInfoWindow()
,它重新调用了 InfoWindowAdapter
方法,它以循环结束并且从未正确传播我的更改。
我使用的解决方案是存储当前选择的标记和我想要显示的 InfoWindow
View 。我在下面的示例中删除了 TextView
正在 DownloadBubbleInfo
AsyncTask
上更新(我相信类似于您的图像线程)。
// Setting a custom info window adapter for the google map
gMap.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
public View getInfoContents(Marker arg0) {
if (selectedMarker.isInfoWindowShown()) {
return infoWindowView;
} else {
// Getting view from the layout file info_window_layout
infoWindowView = getLayoutInflater().inflate(
R.layout.bubblewindowlayout, null);
// Stash the base view in infoWindowView
// Getting reference to the TextView to set latitude
TextView tvTit = (TextView) infoWindowView
.findViewById(R.id.tv_title);
tvTit.setText("Fetching data...");
// Async the update so we're not slowed down waiting for
// the
// bubble to populate
new DownloadBubbleInfo(context, infoWindowView, arg0)
.execute(arg0.getTitle(), arg0.getSnippet());
// Returning the view containing InfoWindow contents
return infoWindowView;
}
}
});
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
// When a marker is clicked set it as the selected marker so
// we can track it for the InfoWindow adapter. This will
// make sure that the correct marker is still displayed when
// the callback from DownloadBubbleInfo is made to
// marker.showInfoWindow() which is needed to update the
// InfoWindow view.
selectedMarker = marker;
infoWindowView = null;
return false;
}
});
DownloadBubbleInfo
AsyncTask
中的相关行:
@Override
protected String[] doInBackground(String... queryparts) {
// Do the query and stash the results in queryResults and pass to
// onPostExecute to attach to the mainview (the current view from the
// main code) and then call showInfoWindow on the marker to re-launch
// the InfoWindowAdapter methods again to repopulate the InfoWindow view
// and attach it.
return queryResults;
}
protected void onPostExecute(String[] results) {
((TextView) mainview.findViewById(R.id.tv_title)).setText(results[0]);
((TextView) mainview.findViewById(R.id.tv_info)).setText(results[1]);
marker.showInfoWindow();
Log.i("Chris-Debug", "Reshowing InfoWindow");
}
现在,所有这一切都应该确保正确的标记被填充了从您的 AsyncTask
返回的正确信息,嘿,很快就成功绕过了极其笨拙的 GoogleMaps v2 for Android API 的另一个角落!
关于android - 如何在更新之前检查 Google Maps InfoWindow 是否仍然显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13745818/
我已经使用 jquery 删除了 google map 的 infoWindow 的关闭按钮,但是无法获取 infoWindow 宽度来进行计算以使文本位于 InfoWindow 的中心。 移除关闭按
我很确定这在很长一段时间内都不是 Google Maps API 的默认行为,但与此同时它肯定已经改变了。 我修改了google提供的Fiddle:https://developers.google.
我遇到了一个奇怪的问题。 infowindow.js 中显示 f = undefined。但我什至没有文件 infowindow.js...当我单击它时就会发生这种情况。它必须显示信息窗口,但它没有。
我在向标记添加信息窗口时遇到了问题。虽然它们看起来都很好,如果我点击它们,窗口就会出现,我似乎遇到了一个错误,我不知道它想要什么。 问题在于,当我单击标记时,会出现包含所有信息的窗口。我收到一个:“U
我在下面的代码中找不到错误,但它显示所有信息窗口的相同内容。 $('#map').gmap({'zoom': 2, 'disableDefaultUI':true}).bind('init', fun
我想将鼠标悬停在标记上时的信息窗口聚焦。只要他停留在信息窗口上,窗口就会打开。下面是我的代码 content=""+j+"."+obj.identifier+"'>"+obj.company.subs
我正在使用 GMaps在我的网站上显示 map 。使用信息窗口创建 map 非常容易。但是,信息窗口仅在单击标记时出现。 我的Javascript: var map; $(document).read
我运行以下代码以在与我的 GeoLocation 标记分开的数组中显示 map 上的标记。创建一个简单的外部链接很容易,但我如何在数组标记中创建相同的外部链接,以及这在 IE 中不起作用的任何原因?
通常我的 map 上有很多标记(比如代表商店)。我有显示标记所代表的商店基本信息的信息窗口,然后,我想在信息窗口 HTML 上放置一个按钮,例如,显示“详细信息”。信息窗口的 html 很简单。信息窗
我正在使用这个非常基本的代码来使 InfoWindow 成为“单例”并在需要时打开它。 (在 iOS5 上的 UIWebView 中) google.maps.event.addListener(ma
目前,当用户单击我们 map 屏幕上的位置标记时,将调用页面方法以从服务器检索附加信息。当 page 方法成功时,结果用于定义显示在 map 上的 infoWindow 的内容。在 page 方法很慢
我实现了一个选项来找到离实际位置最近的标记。我在带有自定义信息窗口的 ClusterItem 中拥有所有标记。在没有聚类的普通谷歌地图上,我可以只使用 marker.showInfoWindow();
我有以下代码,但每次我尝试添加一个按钮时它都不起作用。 有人可以告诉我如何添加一个在点击时显示警告框的按钮吗? var infowindow = new google.maps.InfoWindow(
我正在尝试向路线添加信息窗口。有很多示例可以在标记上的事件监听器上添加 InfoWindow。 但是我怎样才能移动信息窗口以显示在从一个标记到另一个标记的实际计划路线上。之前已经有人试过问这个问题,但
我在click 上设置了一个监听器,以获取我未创建 GoogleMaps (V3 API) 的标记。单击它时,我首先使用一些简单的纯 HTML 和“正在加载”gif 加载信息窗口。 然后我调用一个方法
我正在使用谷歌地图 API 来绘制事件列表。事件有事件举办地点的坐标。大多数场馆都会举办不止一场事件。如何在一个信息窗口中显示具有相同坐标的所有事件。 var locations = [ ['ev
我有一张 map ,我一直试图找出将信息窗口添加到数组中的标记,但我被卡住了。使用单个 map 和单个标记,我可以毫无问题地添加信息窗口。但在我的一生中,我无法让信息窗口在我的数组中工作。如果有人能帮
我从 mysql 数据库获取坐标,如下所示 (, ) (, ) 当我绘制 map 时,它会显示两个点和方向,如下面的代码所示 function initialize() { var m
如何循环关联数组的值?现在我一次只能参加一个协会!在这里,我将 MySQL 表中的所有值传递给 json_encode,仅将纬度和经度作为数组的数组以及其他字符串。谢谢 function myMap(
所以我一直在使用 google-maps-react现在几个月了,一切正常,现在只有一点我不明白。这可能就是我无法实现这一目标的原因。 这是我的 的结构: {this.state
我是一名优秀的程序员,十分优秀!