【问题标题】:Communicating with stacked Activity与堆叠的 Activity 进行通信
【发布时间】: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 调用您的顶级活动,然后使用setResultfinish - 在前一种中使用onActivityResult 来完成您需要的操作。第二种是使用服务,它不会以相同的方式暂停。
  • 是否需要在使用 setResult 后立即使用finish?
  • @AleksG 感谢队友的帮助,我设法用 startActivityForResult 做到了。将其发布为答案,以便我标记它。

标签: android


【解决方案1】:

一旦一个活动被暂停,你就不能直接与它交流,因为它只是暂停了。如果您想调用另一个活动,然后将数据传回第一个活动,请使用startActivityForResult 启动第二个活动 - 然后在“子”活动中,在finish 之前使用setResult。对于您的setResult 呼叫,您可以传递一个Intent,其中包含您想要传递回“父”活动的任何信息。最后,在父活动中,覆盖onActivityResult - 当“子”活动终止时将自动调用它 - 在那里您可以从Intent 检索数据并采取相应的行动。

【讨论】:

    【解决方案2】:

    SEND_BROADCAST

      Intent i = new Intent("BROADCAST_TEST");
      i.putExtra("DATA","TEST MSG");
      sendBroadcast(i);
    

    注册广播

     registerReceiver(uiUpdated, new IntentFilter("BROADCAST_TEST"));
    
     private BroadcastReceiver uiUpdated= new BroadcastReceiver() 
     {
        @Override
        public void onReceive(Context context, Intent intent) 
        {
        String mData;
        Type=intent.getExtras().getString("DATA");
        }
        };
    

    希望这会有所帮助!干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多