我需要Activty4的流程将数据传递给Activity1并关闭除Activity1之外的所有活动。
Activity1-> open Activity2(it has tabview)
Activity2-> open Activity3
Activity3-> Pass the data to Activity1 and also close Activity2 and Activity3
答案 0 :(得分:1)
在活动1上,使用startActivityForResult
调用启动活动2,以便获得其结果:
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
关于活动2:
Intent i = new Intent(this, Activity3.class);
startActivityForResult(i, 2);
在activity3上您设置结果的位置:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
这将设置结果,并通过调用finish
关闭Activity3。
现在,在Activity2上,您应该添加以下代码以获取结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2) {
if (resultCode == Activity.RESULT_OK){
String result = data.getStringExtra("result");
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result); // send the result of Activity3
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
您可以在Activity1上获得结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
String result = data.getStringExtra("result"); // Now you have the result here
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
请注意,您应该与在startActivityForResult上设置的整数和收到的requestCode保持一致,我建议在此处使用常量。
如果您需要更多信息,请查看https://developer.android.com/training/basics/intents/result 和How to manage startActivityForResult on Android?
答案 1 :(得分:0)
恕我直言,最好的选择是使用Observable
模式。
Activity 4
有一个observable
对象,Activity 1,2,3
将被注册到observe
它。
Activity 4
中的数据准备就绪后,Activity 4
会发送信号通知通知数据已准备就绪,然后Activity 1 will receive the data
和{{ 1}}
答案 2 :(得分:0)
最简单的方法如下 每当您希望退出所有其他活动中的活动时,都可以通过这种方式完成
在第三次活动中完成
Intent intent = new Intent(this, FirstActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("your_params","param"); // data
startActivity(intent);
在第一个活动中,在oncreate句柄意图中
getIntent().getStringExtra("your_params");
如果未调用OnCreate,请重写onNewIntent方法
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
getIntent().getStringExtra("your_params");
}