How to manage startActivityForResult on Android How to manage startActivityForResult on Android android android

How to manage startActivityForResult on Android


From your FirstActivity, call the SecondActivity using the startActivityForResult() method.

For example:

int LAUNCH_SECOND_ACTIVITY = 1Intent i = new Intent(this, SecondActivity.class);startActivityForResult(i, LAUNCH_SECOND_ACTIVITY);

In your SecondActivity, set the data which you want to return back to FirstActivity. If you don't want to return back, don't set any.

For example: In SecondActivity if you want to send back data:

Intent returnIntent = new Intent();returnIntent.putExtra("result",result);setResult(Activity.RESULT_OK,returnIntent);finish();

If you don't want to return data:

Intent returnIntent = new Intent();setResult(Activity.RESULT_CANCELED, returnIntent);finish();

Now in your FirstActivity class, write the following code for the onActivityResult() method.

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == LAUNCH_SECOND_ACTIVITY) {        if(resultCode == Activity.RESULT_OK){            String result=data.getStringExtra("result");        }        if (resultCode == Activity.RESULT_CANCELED) {            // Write your code if there's no result        }    }} //onActivityResult

To implement passing data between two activities in a much better way in Kotlin, please go through 'A better way to pass data between Activities'.


How to check the result from the main activity?

You need to override Activity.onActivityResult() and then check its parameters:

  • requestCode identifies which app returned these results. This is defined by you when you call startActivityForResult().
  • resultCode informs you whether this app succeeded, failed, or something different
  • data holds any information returned by this app. This may be null.


Example

To see the entire process in context, here is a supplemental answer. See my fuller answer for more explanation.

enter image description here

MainActivity.java

public class MainActivity extends AppCompatActivity {    // Add a different request code for every activity you are starting from here    private static final int SECOND_ACTIVITY_REQUEST_CODE = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    // "Go to Second Activity" button click    public void onButtonClick(View view) {        // Start the SecondActivity        Intent intent = new Intent(this, SecondActivity.class);        startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);    }    // This method is called when the second activity finishes    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        // check that it is the SecondActivity with an OK result        if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {            if (resultCode == RESULT_OK) { // Activity.RESULT_OK                // get String data from Intent                String returnString = data.getStringExtra("keyName");                // set text view with string                TextView textView = (TextView) findViewById(R.id.textView);                textView.setText(returnString);            }        }    }}

SecondActivity.java

public class SecondActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);    }    // "Send text back" button click    public void onButtonClick(View view) {        // get the text from the EditText        EditText editText = (EditText) findViewById(R.id.editText);        String stringToPassBack = editText.getText().toString();        // put the String to pass back into an Intent and close this activity        Intent intent = new Intent();        intent.putExtra("keyName", stringToPassBack);        setResult(RESULT_OK, intent);        finish();    }}