在同时通知适配器和触发意图的同时控制流量

时间:2011-11-24 08:47:36

标签: java android google-maps listview adapter

我正在为双屏Android设备编写应用程序。

我有一个方法(通过按下按钮调用)通知适配器(显示在一个屏幕上,即在RightActivity上),然后向另一个屏幕上显示的地图发出意图(即LeftActivity )。方法如下:

public void onClick(View v) {

    MyAction.fireIntentToMap(context, myList); // fire intent to map on the left screen
    MyListAdapter.notifyDataSetChanged(); // adapter is for listview displayed on right screen
}

我想要的是,首先应该向左侧屏幕上的地图活动触发意图,并且仅在此之后(即显示意图中接收的项目的地图)应该通知列表适配器并且列表视图应该刷新自己。

但是,这不会发生。会发生的是,调用进入fireIntenToMap方法并且触发了intent(即调用了startActivity(intent);。但是,在地图接收到intent之前,行{{ 1}}执行,刷新列表视图。稍后由地图接收意图。

为什么会这样?我怎样才能获得单个线程行为(映射先处理intent,然后刷新列表视图)?

1 个答案:

答案 0 :(得分:0)

正如您所注意到的,您无法控制Intent何时实际“交付”。

您的问题有几种解决方案,但IMO最优雅的是使用ordered broadcasts。因此,您的地图和列表会(动态地)注册以接收您的广播,并设置优先级,以便按所需顺序调用它们。

当您通过'intentFilter.setPriority(..)'注册接收广播时,优先级通过'Context.registerReceiver(..)'设置。

然后用`Context.sendOrderedBroadcast(..)'触发广播。