2014-06-06 83 views
0

我在想,是否有兩種活動之間的通信方式,其中一種是暫停(堆疊)?與堆疊的活動進行通信

我試着sendBroadcast和接收數據,但到目前爲止沒有運氣去實現它。 我在onCreate()中註冊接收器並在onDestroy()中取消註冊,所以它在第二個活動Activity工作時仍然可以工作。 我已經將過濾器添加到接收器,我的意圖有適當的標誌。

它甚至有可能使其工作? 或者有沒有更好的方法來實現這種溝通?

============= EDIT添加代碼的請求==========

====== CODE ===== =

- RECEIVER

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(); 
      } 
      } 
     } 

- BROADCAST

 Intent dataToAdsList = new Intent(Globals.DATA_TO_ADSLIST); 
     dataToAdsList.putExtra(Globals.AD_ORGANIZER_TO_ADSLIST_VALUE, 1); 
     context.sendBroadcast(dataToDbService); 

- UNREGISTER

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (getActivity().isTaskRoot()) { 
     AQUtility.cleanCacheAsync(getActivity()); 
    } 
    LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(localBroadcastReceiver); 
} 

- REGISTER

@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); 
} 

感謝您的幫助!

+0

如果您發佈代碼,找到解決方案會更好。 –

+0

我已經添加了代碼。 – JakubW

+0

您無法與暫停的活動進行通信。您必須將該活動置於前臺才能開始任何處理。解決問題的兩種方法:使用'startActivityForResult'調用頂級活動,然後使用'setResult'和'finish' - 在前一箇中使用'onActivityResult'來完成你所需要的。第二個是使用一種服務,它不會以相同的方式暫停。 –

回答

1

一旦活動暫停,你不能用它直接溝通,因爲它就是這樣 - 暫停。如果您想要調用其他活動並將數據傳回第一個活動,請使用startActivityForResult開始第二個活動 - 然後在「子」活動中,在finish之前使用setResult。對於您的setResult致電,您可以通過Intent以及任何您想要傳回「父母」活動的信息。最後,在父活動中,覆蓋onActivityResult - 當「孩子」活動終止時,它將自動調用 - 在那裏您可以從Intent中檢索數據並相應地對其執行操作。

0

SEND_BROADCAST

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

註冊BROADCAST

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"); 
    } 
    }; 

希望這有助於!乾杯!