我正在为双屏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,然后刷新列表视图)?
答案 0 :(得分:0)
正如您所注意到的,您无法控制Intent何时实际“交付”。
您的问题有几种解决方案,但IMO最优雅的是使用ordered broadcasts。因此,您的地图和列表会(动态地)注册以接收您的广播,并设置优先级,以便按所需顺序调用它们。
当您通过'intentFilter.setPriority(..)'注册接收广播时,优先级通过'Context.registerReceiver(..)'设置。