gpt4 book ai didi

Android, map 聚类完成回调

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:11 24 4
gpt4 key购买 nike

我在我的应用程序中使用 Google map 及其集群实用程序。集群本身工作正常,但当我尝试处理配置更改时遇到问题。

这是我的情况:

  1. 用户在屏幕上看到一张 map ,它是 fragment .
  2. 聚类完成后, map 上的标记就会出现。用户可以与 markers 互动.
  3. 当用户选择 marker , 它被突出显示并且 BottomSheet展开显示。

如果用户旋转屏幕(即发生配置更改),我将使用 onSaveInstanceState 保存选择的标记(实际上我不保存标记本身,而只保存指向相关 List 条目的链接,如 ID)。然后,我想恢复配置更改之前的用户选择。

聚类本身是这样执行的:

clusterManager.clearItems();
clusterManager.addItems(eventManager.getEventList());
clusterManager.cluster();

当从服务器接收到数据时执行此代码。执行聚类时,所有markers ,显然,也被重新创建。因此,为了突出显示先前的用户选择(先前的 marker),我必须知道集群实用程序何时完成其操作。到那时我确信我可以安全地使用这样的功能:

clusterManager.getRenderer()).getMarker(<param>)

clusterManager.getRenderer()).getClusterItem(<param>)

否则,这些将返回 null有时,如果聚类任务尚未完成。

但是,我找不到合理的方法,如何在集群完成时从集群实用程序(即 ClusterManager )获得响应。我想我需要更新这个标准的聚类代码:

 /**
* Runs the clustering algorithm in a background thread, then re-paints when results come back.
*/
private class ClusterTask extends AsyncTask<Float, Void, Set<? extends Cluster<T>>> {
@Override
protected Set<? extends Cluster<T>> doInBackground(Float... zoom) {
mAlgorithmLock.readLock().lock();
try {
return mAlgorithm.getClusters(zoom[0]);
} finally {
mAlgorithmLock.readLock().unlock();
}
}

@Override
protected void onPostExecute(Set<? extends Cluster<T>> clusters) {
mRenderer.onClustersChanged(clusters);
}
}

我认为,onPostExecute应该不对 Renderer 做出回应仅,但对 ClusterManager 的用户(就像我的 fragment )集群已经完成。但我不想修改标准代码。

有没有更好的方法来处理这种情况?

最佳答案

你的做法是错误的。

你应该实现:

class YourClusterItemRenderer extends DefaultClusterRenderer<YourClusterItem>

并将其设置为 ClusterManager 作为渲染器,如下所示:

mClusterManager.setRenderer(new YourClusterItemRenderer(...));

重写 YourClusterItemRenderer 的方法 onBeforeClusterItemRenderedonBeforeClusterRendered,然后您可以根据服务器的参数根据您的逻辑更改每个标记的外观。

因此,当 ClusterManager 完成渲染所有标记时,根据用户状态等,它们看起来就像您想要的那样。

关于Android, map 聚类完成回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39743221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com