java - 如何在 Asynctask 中修改 Google Maps v2 标记的 fragment 文本?

标签 java android google-maps android-asynctask

所以,我四处寻找这个问题的答案。

我想弄清楚如何在异步任务的 onPostExecute() 调用中修改放置在我的 Google map (map api v2)上的标记的 fragment 文本。我想在我的项目中使用它的方式是在用户单击标记后更新代码段文本。有点像对该标记上已经预先设置的信息进行更新。

示例,按操作顺序:

  1. 用户在我的 map 上选择一个标记,
  2. Asynctask 被触发(通过 onMarkerClickListener())
  3. Asynctask preExecute() 将 fragment 的文本更改为“获取下一个到达时间...”
  4. Asynctask doInBackground() 在我的数据库中查询请求的数据
  5. Asynctask postExecute() 将选定的标记 fragment 文本设置为“Next: 4:15PM”

我尝试了几种不同的方法,得出了一个简洁合理的解决方案,但还是不行。我遇到的问题是,标记需要是“最终”类型,当我这样做时,它不会更新显示给用户的 fragment 文本,但它仍然会运行异步任务并成功完成。

以下是我试过的代码:

ma​​p.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);
}

我只是不想在我的数据库筛选数百条时间记录时 map 挂起。非常感谢任何帮助,因为我相信这不仅对我有帮助。

最佳答案

这是 Android Google Maps API 中的一个已知缺陷。看看here一些解决方法。

关于java - 如何在 Asynctask 中修改 Google Maps v2 标记的 fragment 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21447229/

相关文章:

java - 捕获所有 java.lang.Error 用于记录目的并允许它们在堆栈中向上工作

java - 推荐 XML Difference 开源 Java 库吗?

android - 我可以从 android 动态壁纸打开 URL 吗?

javascript - 谷歌热图梯度范围?

javascript - Google map API v3 显示行程时间

java - Dagger 2 子类比父类具有更具体的依赖关系

Java 正则表达式 : How to replace double or more slashes with a single slash but ignoring http://or https://

java - 如何使用字符串或整数以外的数据类型启动 Intent?

java - 字符串列表不适用于 Spinner ArrayAdapter

iphone - 谷歌地图输出=kml 坏了?