Java 如何在Asynctask中修改Google Maps v2标记的代码段文本?
所以,我到处寻找这个问题的答案 我试图弄清楚如何在asynctask的onPostExecute()调用中修改放置在Google地图(Map api v2)上的标记的代码段文本。我想在我的项目中如何使用它,就是在用户单击标记后更新代码段文本。有点像对该标记上已预设的信息的更新 例如,按照操作顺序:Java 如何在Asynctask中修改Google Maps v2标记的代码段文本?,java,android,google-maps,android-asynctask,Java,Android,Google Maps,Android Asynctask,所以,我到处寻找这个问题的答案 我试图弄清楚如何在asynctask的onPostExecute()调用中修改放置在Google地图(Map api v2)上的标记的代码段文本。我想在我的项目中如何使用它,就是在用户单击标记后更新代码段文本。有点像对该标记上已预设的信息的更新 例如,按照操作顺序: 用户在我的地图上选择一个标记 异步任务被触发(通过onMarkerClickListener()) Asynctask preExecute()将代码段的文本更改为“获取下次到达时间…” Asynct
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// Update marker next stop time
updateMarkerSnippet(marker);
return false;
}
});
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);
}
updateMarkerSnippet():
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// Update marker next stop time
updateMarkerSnippet(marker);
return false;
}
});
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);
}
public void updateMarkerSnippet(最终标记){
最终字符串标题=marker.getTitle();
AsyncTask update=新建AsyncTask(){
私有字符串nextArrival=“”;
@凌驾
受保护的Void onPreExecute(){
marker.setSnippet(“获取下次到达时间…”);
}
@凌驾
受保护的空位背景(空位…空位){
nextArrival=db.getNextArrival(title);//db是我的数据库sql类(运行查询)
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
marker.setsnipet(“下一步:+nextArrival”);
}
};
update.execute((Void[])null);
}
我只是不希望在我的数据库筛选数百条时间记录时地图挂起。非常感谢您的任何帮助,因为我相信这将不仅仅是我自己的帮助。这是安卓谷歌地图API中的一个已知缺陷。查看一些解决方法。这很有趣,因为
标记.setPosition
工作正常,但标记.setNippet
不工作(对于我的自定义代码段布局),我这样修复了它:
if(marker.isInfoWindowShown())
{
marker.hideInfoWindow();
marker.showInfoWindow();
}
感谢您将我链接到该问题页面。[对于其他人]:在彻底阅读之后,我了解到从标记显示的信息面板不是实时视图。只是内容的预渲染图像。我可以像上面发布的那样保留所有代码,只需要在异步任务的onPostExecute()方法中添加marker.showInfoPanel()。非常感谢。