2017-03-02 53 views
0

我有兩個活動A和B. 從A,我通過startActivityForResult向B發送一些數據,並從B獲取ActivityResult的回覆。 現在,如果我想處理髮送給我的任何B,然後將數據發送回B,那麼我還必須在B中使用startActivityForResultActivityResult如何在(A,B)活動中管理'startActivityForResult'和'ActivityResult'?

它的聊天(來回)實物A和B.

任何幫助之間的通信中,將不勝感激。

+0

'sendBroadcast'可以解決問題嗎? – Ircover

+0

你可以在活動B中調用'setResult()',並將數據傳遞給intent並在活動A –

+0

中處理'startActivityForResult'感謝您的幫助,但我試圖實現的是: A將數據發送到B .. ... B發送數據返回到A ..... A發送數據後,再次返回到B –

回答

0

我已經寫了使用LocalBroadcastReceiveractivities

活動A之間發送數據的代碼:

public class A extends AppCompatActivity { 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_a); 

     // Registering LocalBroadcastReceiver to receiver data from B 
     LocalBroadcastManager.getInstance(this).registerReceiver(mReceiverA, new IntentFilter("activity_a")); 
     findViewById(R.id.btnStartB).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(A.this, B.class); 
       i.putExtra("key_string", "Value"); // add stuffs to be sent to Activity B 
       startActivity(i); 
      } 
     }); 
    } 

    @Override 
    protected void onDestroy() { 
     // Don't forget to unregister receiver 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiverA); 
     super.onDestroy(); 
    } 

    BroadcastReceiver mReceiverA = new BroadcastReceiver() { 
     @Override 
     public void onReceive(final Context context, Intent intent) { 
      // Get data from Intent, which we got from Activity B 
      if (intent.hasExtra("key_string")) { 
       Toast.makeText(context, intent.getStringExtra("key_string"), Toast.LENGTH_SHORT).show(); 
       // Here you can process the data, and send result to Activity B 
       // Adding delay temporary, so that Toast will be visible on by one 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         Intent i = new Intent("activity_b"); 
         i.putExtra("key_string", "Value Of String From A"); 
         LocalBroadcastManager.getInstance(context).sendBroadcast(i); 
        } 
       }, 600); 
      } 
     } 
    }; 
} 


活動B:

public class B extends AppCompatActivity { 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_b); 

     // Registering LocalBroadcastReceiver to receiver data from A 
     LocalBroadcastManager.getInstance(this).registerReceiver(mReceiverB, new IntentFilter("activity_b")); 

     findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent("activity_a"); 
       i.putExtra("key_string", "Value Of String From B"); 
       LocalBroadcastManager.getInstance(B.this).sendBroadcast(i); 
      } 
     }); 
    } 

    @Override 
    protected void onDestroy() { 
     // Don't forget to unregister receiver 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiverB); 
     super.onDestroy(); 
    } 

    BroadcastReceiver mReceiverB = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get data from Intent, which we got from Activity B 
      if (intent.hasExtra("key_string")) { 
       Toast.makeText(context, intent.getStringExtra("key_string"), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 
} 

希望這有助於:-)

+0

感謝您的幫助,但我想實現的是: A發送數據到B .. .... B分別發送數據回A ..... A點的過程 –

+0

後到B再次發送數據和下面是我的代碼 活性的 ---------- Intent i = new Intent(this,B.class); startActivityForResult(i,1); 保護無效onActivityResult(INT requestCode,INT發送resultCode,意圖數據){ 如果(requestCode == 1){ 如果(resultCode爲== Activity.RESULT_OK){ 字符串結果= data.getStringExtra( 「結果」); } if(resultCode == Activity。RESULT_CANCELED){ } } } ---------- 活動乙 ---------- 意圖returnIntent =新意圖(); returnIntent.putExtra(「result」,result); setResult(Activity.RESULT_OK,returnIntent); finish(); –

+0

是的。 'mReceiverA'完全一樣。一旦從'Activity B'獲得數據,處理它並通過另一個廣播將結果發回給A.做一件事!按照我上面提到的做兩個班,你就會理解整個過程。相信我。 – Wizard

0
Intent yourFirstAct= new Intent(firstAct.this,second.class); 
yourFirstAct.putExtra("",""); 
startActivitForResult(yourFirstAct); 

在第一個活動,

public void onAcitivityResult(....){ 
super(); 
} 
在你的第二個活動

,當你做了,

Intent yoursecAct= new Intent(); 
yourSecAct.putExtra("",""); 
setResult(yourSecAct); 
finish(); 

如果您在片段的手段做startActivityResult(),

您的片段mainActivity必須返回超級()

public void onAcitivityResult(...){super()} 
相關問題