因此,在我的程序中,我有一个包含两个选项卡的 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/