因此,在我的程序中,我有一个TabActivity,其中包含两个选项卡,一个选项卡是ListView,另一个选项卡是通过Intent启动的MapActivity。我要我的应用程序执行的操作是发送带有电话位置和产品名称的查询,并列出具有该产品的最近商店的列表,然后在“地图”标签中显示这些商店,并在另一个标签中显示这些商店的列表。当启动TabActivity时,该应用程序开始侦听位置,并在获取位置后立即开始与服务器(在AsyncTask中)进行通信。

问题在于,当TabActivity启动时,它也将启动MapActivity,因为它位于第一个选项卡中,并且MapActivity开始尝试在地图上添加叠加层,但是这些叠加层尚无数据,因为TabActivity中的AsyncTask尚未完成尚未从服务器获取数据,这使程序崩溃。

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

最佳答案

可能更好的方法是使用ActivityGroup#getCurrentActivity()获取当前的标签活动,检查并转换为预期的MapActivity,然后在该活动中调用一个方法:

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解决方案的问题在于,广播超出了应用程序的沙箱,试图通知设备上正在侦听您意图的任何人,即使只有一个接收者实际上想要进行任何操作。

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

10-10 23:29