Logo Icon Logo
A Crowd-sourced Cookbook on Writing Great Android® Apps
GitHub logo Twitter logo OReilly Book Cover Art
Retrieving Data from a Subactivity Back to Your Main ActivityBack to Android Cookbook Home | Up to Chapter: Inter/Intra-Application Communication

Author: Ulysses Levy ('aschyiel')
In Published Edition? Yes
FormatLanguage: WikiFormat

Retrieving Data from a Subactivity Back to Your Main Activity


Your main activity needs to retrieve data from a sub activity.


Use startActivityForResult(), and onActivityResult() in the main activity, and setResult() in the sub-activity.


In this example we return a string from a Sub-Activity (MySubActivity) back to the Main Activity (MyMainActivity).

The first step is to "push" data from MyMainActivity via the Intent mechanism.

public class MyMainActivity extends Activity
    //..for logging..
    private static final String TAG = "MainActivity";
    //..The request code is supposed to be unique?..
    public static final int MY_REQUEST_CODE = 123;
    public void onCreate( Bundle savedInstanceState )
    private void pushFxn()
        Intent intent = 
            new Intent( 
                MySubActivity.class );
        startActivityForResult( intent, MY_REQUEST_CODE );
    protected void onActivityResult(
            int requestCode, 
            int resultCode,
            Intent pData) 
         if ( requestCode == MY_REQUEST_CODE ) 
             if (resultCode == Activity.RESULT_OK ) 
                 final String zData = pData.getExtras().getString( MySubActivity.EXTRA_STRING_NAME );
                 //..do something with our retrieved value..
                 Log.v( TAG, "Retrieved Value zData is "+zData );
                 //..logcats "Retrieved Value zData is returnValueAsString" 


The second major step is to "pull" data back from MySubActivity to MyMainActivity.

public class MySubActivity extends Activity
    public static final String EXTRA_STRING_NAME = "extraStringName";
    public void onCreate( Bundle savedInstanceState )
    private void pullFxn()
        Intent iData = new Intent();
            "returnValueAsString" );
            iData );
        //..returns us to the parent "MyMainActivity"..

Code Notes:


Use Case (informal)

In my app, I have a ListActivity with a ContextMenu (user long presses a selection to do something), and I wanted to let the Main-Activity know which row the user had selected for the ContextMenu action ( atm, my app only has one action ). I ended up using intent extras to pass the selected row's index as a string back to the parent activity; From there I could just convert the index back to an int and use it to identify the user row selection via ArrayList.get( index ). This worked for me, however I am sure there is another/better way.

See Also

Also see How to push string-values using Intent.putExtra()

ResultCode "gotcha"

startActivityForResultExample (under "Returning a Result from a Screen")

(android.content.Intent, int) Activity.startActivityForResult()