android - 如何让TabActivity中的MapActivity等待服务端获取Overlay数据?

标签 android maps wait mapactivity

因此,在我的程序中,我有一个包含两个选项卡的 TabActivity,一个选项卡是 ListView,另一个是通过 Intent 启动的 MapActivity。我想让我的应用程序做的是发送一个包含电话位置和产品名称的查询,并查看最近的有该产品的商店列表,然后在 map 选项卡中显示这些商店并在另一个选项卡中显示它们的列表。当 TabActivity 启动时,应用程序开始监听位置,并在获取位置后立即开始与服务器的通信(在 AsyncTask 中)。

问题是当 TabActivity 启动时,它也会启动 MapActivity,因为它在它的第一个选项卡中,并且 MapActivity 开始尝试在 map 上添加叠加层但是这些叠加层还没有数据,因为 AsyncTask 在TabActivity 还没有完成从服务器获取数据,导致程序崩溃。

我需要我的应用程序在首次打开 TabActivity 时显示一个空的谷歌地图,并等待从服务器获取数据,然后向 map 添加叠加层以标记其上的商店。谁能告诉我如何实现这一目标?我想我应该从 MapActivity 中的 onCreate 中删除 Overlay 制作部分代码并将其放在其他地方,但我不知道在哪里。

最佳答案

一种可能更好的方法是使用 ActivityGroup#getCurrentActivity() 获取当前选项卡 Activity ,检查并转换为预期的 MapActivity,然后调用该 Activity 中的方法:

protected void onPostExecute(final Bitmap result) {
    final Activity activity = MyTabActivity.this.getCurrentActivity();
    if (activity instanceof MyMapActivity) {
        ((MyMapActivity) activity).onBitmapReceived(result); // or some other method, like onMarkersReceived(), etc..
    }
}

BroadcastReceiver 解决方案的问题是广播超出了您应用程序的沙盒范围,试图通知设备上正在监听您 Intent 的任何人,即使实际上只有一个接收者想要做任何事情与它。

关于android - 如何让TabActivity中的MapActivity等待服务端获取Overlay数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876450/

相关文章:

android - Android 模拟器上没有剩余空间

安卓 - Sphero - CalledFromWrongThreadException

maps - Google map API V3 - DirectionsRendererOptions 和 InfoWindow 中的自定义内容

macos - 使用 xcode 6 将 map 添加到 osx 应用程序

c - 如何让 C 程序等待(在 Linux 上)?

java - 如何理解Java Thread中的wait和notify方法?

java - 如何在workmanager Android上传递输入数组列表

Android DrawerLayout.setDrawerLockMode() 不工作

javascript - 谷歌地图渲染不正确,无法用已经给出的答案解决这个问题

java - 通知不起作用..永远等待线程 Java