我有兩個活動A和B. 從A,我通過startActivityForResult
向B發送一些數據,並從B獲取ActivityResult
的回覆。 現在,如果我想處理髮送給我的任何B,然後將數據發送回B,那麼我還必須在B中使用startActivityForResult
和ActivityResult
。如何在(A,B)活動中管理'startActivityForResult'和'ActivityResult'?
它的聊天(來回)實物A和B.
任何幫助之間的通信中,將不勝感激。
我有兩個活動A和B. 從A,我通過startActivityForResult
向B發送一些數據,並從B獲取ActivityResult
的回覆。 現在,如果我想處理髮送給我的任何B,然後將數據發送回B,那麼我還必須在B中使用startActivityForResult
和ActivityResult
。如何在(A,B)活動中管理'startActivityForResult'和'ActivityResult'?
它的聊天(來回)實物A和B.
任何幫助之間的通信中,將不勝感激。
我已經寫了使用LocalBroadcastReceiver
到activities
活動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();
}
}
};
}
希望這有助於:-)
感謝您的幫助,但我想實現的是: A發送數據到B .. .... B分別發送數據回A ..... A點的過程 –
後到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(); –
是的。 'mReceiverA'完全一樣。一旦從'Activity B'獲得數據,處理它並通過另一個廣播將結果發回給A.做一件事!按照我上面提到的做兩個班,你就會理解整個過程。相信我。 – Wizard
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()}
'sendBroadcast'可以解決問題嗎? – Ircover
你可以在活動B中調用'setResult()',並將數據傳遞給intent並在活動A –
中處理'startActivityForResult'感謝您的幫助,但我試圖實現的是: A將數據發送到B .. ... B發送數據返回到A ..... A發送數據後,再次返回到B –