如何开始activityforresult 从第 4 次 activity 得到结果

how to get startactivityforresult get result from 4th activity

我从那个 startActivityForResult() 得到 MainActivity 第二个 activtiy 但我想要第四个结果 activity 我应该怎么做?

MainActivity

FirstActivity

secondActivity

ThirdActivity

FourActivity

由此我想要第 4 个 activity 的结果,但是从第二个 activity 到第四个活动是依赖活动

MainActivity.java

public static String MY_RESULT=1000;

     intent=new Intent(MainActivity.this,FirstActivity.class);
                    startActivityForResult(intent,MY_RESULT);





 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {

            switch (requestCode) {
                case MY_RESULT:
                    String info = data.getExtras().getString("KEY");


                    if(!info.equals("")) {
                        Log.i("TAAAG", info);

                    }

                    break;
}
}
}

FirstActivity.java

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                    startActivity(intent);
finish();

SecondActivity.java

Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
                    startActivity(intent);
finish();

ThirdActivity.java

 Intent intent = new Intent(ThirdActivity.this, FourActivity.class);
                        startActivity(intent);
finish();

FourActivity.java

  Intent intent = new Intent();


         intent.putExtra("KEY", "my data in string");

                        setResult(RESULT_OK, intent);


      finish();

这里 MainActivity.java 我无法得到任何 result.And 我想要 FourActivity.java 的结果。请帮忙

您可以开始每个 activity 的结果并像这样传递结果:

FourthActivity -> ThirdActivity -> SecondActivity -> FirstActivity

在您的第三个、第二个和第一个活动中,使用 onActivityResult 从之前关闭的 Activity 中获取结果。

在第四个 activity 中,您在 setResult() 中设置 RESULT_OK 没问题,但在您的 onActivityResult 中只需删除此:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

                String info = data.getExtras().getString("KEY");
                if(!info.equals("")) {
                    Log.i("TAAAG", info);

  }
}

编码愉快!!

没有简单的方法,你必须使用startActivityForResult()用于第一到第三Activity并且全部使用setResult()来监听和传回数据。

示例代码如下:

class FirstActivity extends Activity {

    public static int MY_RESULT = 1000;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
        startActivityForResult(intent, MY_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == MY_RESULT && resultCode == RESULT_OK) {
            String dataStr = data.getStringExtra("KEY");
            Toast.makeText(this, dataStr, Toast.LENGTH_LONG).show();
        }
    }
}

class SecondActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
        startActivityForResult(intent, FirstActivity.MY_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
            setResult(resultCode, data);
            finish();
        }
    }
}

class ThirdActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(ThirdActivity.this, FourthActivity.class);
        startActivityForResult(intent, FirstActivity.MY_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
            setResult(resultCode, data);
            finish();
        }
    }
}

class FourthActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent data = new Intent();
        data.putExtra("KEY", "This is a test String");
        setResult(RESULT_OK, data);
        finish();
    }
}

其他可能的解决方案包括:

  1. 定义您自己的 Singleton 可以在应用程序会话期间保存数据
  2. 使用EventBus
  3. 使用SharedPreferences
  4. 使用本地数据库