所以,我已经搜索了高低,找到了这个问题的答案。
我想知道如何在asynctask的onPostExecute()调用中修改放置在我的Google Map(map api v2)上的标记的片段文本。我想如何在我的项目中使用它,是在用户点击标记后更新片段文本。有点像对该标记上预先设置的信息的更新。
示例,按操作顺序:
我尝试了一些不同的方法,并得出了一个简洁合理的解决方案,但它不起作用。我得到的问题是,标记需要是'final'类型,当我这样做时,它不会更新显示给用户的片段文本,但是它仍然通过asynctask运行并成功完成。 / p>
以下是我尝试过的代码:
map.setOnMarkerClickListener():
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// Update marker next stop time
updateMarkerSnippet(marker);
return false;
}
});
updateMarkerSnippet():
public void updateMarkerSnippet(final Marker marker) {
final String title = marker.getTitle();
AsyncTask<Void, Void, Void> update = new AsyncTask<Void, Void, Void>() {
private String nextArrival = "";
@Override
protected Void onPreExecute() {
marker.setSnippet("Fetching next arrival time...");
}
@Override
protected Void doInBackground(Void... voids) {
nextArrival = db.getNextArrival(title); // db is my database sql class (runs queries)
return null;
}
@Override
protected void onPostExecute(Void result) {
marker.setSnippet("Next: " + nextArrival);
}
};
update.execute((Void[]) null);
}
我只是不希望地图挂起,而我的数据库正在筛选数百个时间记录。非常感谢任何帮助,因为我相信这不仅仅对我自己有帮助。
答案 0 :(得分:1)
这是Android Google Maps API中的一个众所周知的缺点。看看here了解一些变通方法。
答案 1 :(得分:0)
这很有趣,因为marker.setPosition
效果不错但marker.setSnippet
没有(对于我的自定义代码段布局),我修复了它:
if(marker.isInfoWindowShown())
{
marker.hideInfoWindow();
marker.showInfoWindow();
}