【发布时间】:2014-06-06 07:33:44
【问题描述】:
我想知道有没有办法在其中一个暂停(在堆栈上)的两个活动之间进行通信?
我尝试通过 sendBroadcast 和接收数据来实现它,但到目前为止还没有运气。 我在 onCreate() 中注册接收器并在 onDestroy() 中取消注册它,所以它仍然可以在第二个活动 Activity 工作时工作。 我已将过滤器添加到接收器,并且我的意图具有正确的标志。
甚至有可能让它工作吗? 或者有没有更好的方法来实现这种沟通?
=============EDIT 按要求添加代码==========
======代码======
-接收器
private BroadcastReceiver localBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Globals.DATA_TO_ADSLIST)) {
int value = intent.getIntExtra(Globals.AD_ORGANIZER_TO_ADSLIST_VALUE, 0);
if (value > 0) {
listViewAdapter.notifyDataChange();
}
}
}
-广播
Intent dataToAdsList = new Intent(Globals.DATA_TO_ADSLIST);
dataToAdsList.putExtra(Globals.AD_ORGANIZER_TO_ADSLIST_VALUE, 1);
context.sendBroadcast(dataToDbService);
-取消注册
@Override
public void onDestroy() {
super.onDestroy();
if (getActivity().isTaskRoot()) {
AQUtility.cleanCacheAsync(getActivity());
}
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(localBroadcastReceiver);
}
-注册
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
IntentFilter filter = new IntentFilter();
filter.addAction(Globals.SEND_ADS_LIST);
filter.addAction(Globals.DATA_TO_ADSLIST);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(localBroadcastReceiver, filter);
}
感谢您的帮助!
【问题讨论】:
-
如果您发布代码会更好地找到解决方案。
-
您无法与暂停的活动进行通信。您必须将该活动带到前台才能开始任何类型的处理。解决问题的两种方法:使用
startActivityForResult调用您的顶级活动,然后使用setResult和finish- 在前一种中使用onActivityResult来完成您需要的操作。第二种是使用服务,它不会以相同的方式暂停。 -
是否需要在使用 setResult 后立即使用finish?
-
@AleksG 感谢队友的帮助,我设法用 startActivityForResult 做到了。将其发布为答案,以便我标记它。
标签: android