将结果发送回多个活动并完成除第一个活动以外的其他活动

时间:2019-05-09 08:01:42

标签: android

我需要Activty4的流程将数据传递给Activity1并关闭除Activity1之外的所有活动。

Activity1-> open Activity2(it has tabview)
Activity2-> open Activity3
Activity3-> Pass the data to Activity1 and also close Activity2 and Activity3

3 个答案:

答案 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/resultHow to manage startActivityForResult on Android?

答案 1 :(得分:0)

  1. 恕我直言,最好的选择是使用Observable模式。

  2. Activity 4有一个observable对象,Activity 1,2,3将被注册到observe它。

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