StackTips

Starting an Android Activity for Result

nilan avtar

Written by

Nilanchala,  12 min read,  2.74K views, updated on Sept. 17, 2023

In Android user interface is displayed through an activity. Activity is used to represent the data to user and allows user interaction. In an android application, we can have multiple activities and that can interact with each other. This tutorial I will explain more about, how to switch between one Activity to another.

Starting an activity for a result

1. Starting An Activity

We can call one activity from another by using Intents. Intent is one of the main building block which provides an abstract description of an operation to be performed. startActivity(intent) method belongs to your Activity class and can be used for starting a new activity.

  Intent intent = new Intent(context, YourActivityClass.class);
  startActivity(intent);

2. Starting Activity for Result

Starting another activity doesn’t have to be one-way. You can also start another activity and receive a result back. To receive a result, call startActivityForResult() instead of startActivity(). However, the activity that responds must be designed to return a result. When it does, it sends the result as another Intent object. Your activity receives it in the onActivityResult() callback.

Note: You can use explicit or implicit intents when you call startActivityForResult(). When starting one of your own activities to receive a result, you should use an explicit intent to ensure that you receive the expected result.

 Intent intent = new Intent(this, SecondActivity.class); 
 startActivityForResult(intent, requestCode);

requestCode is an integer argument, that identifies your request. When you receive the result Intent, the callback provides the same request code so that your app can properly identify the result and determine how to handle it.

3. Passing Result Back

In secondActivity if you want to send back data:

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

If you don’t want to return data:

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

4. Receive the Result

When Second Acivity is done with its work and returns the result back, the caller activity’s onActivityResult() method gets invoked.

requestCode: The request code you passed to startActivityForResult().
resultCode: A result code specified by the second activity. This is either RESULT_OK if the operation was successful or RESULT_CANCELED if the user backed out or the operation failed for some reason.
resultIntent: An Intent that carries the result data.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1){
    	if(resultCode == RESULT_OK){      
             //here is your result
            String result=data.getStringExtra("result");  
            Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();	            
        }
        if (resultCode == RESULT_CANCELED) {    
            //Write your code if there's no result
            Toast.makeText(getApplicationContext(), "Nothing Returned!", Toast.LENGTH_SHORT).show();
        }
    }
}

5. Example

In this example, we will develop an application with two activities, the first activity will call the second activity for result. The second activity has two buttons; One sends response as “Smile Back” and other doesn’t returns any response.

activity_first.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="fill_parent"
	android:background="@drawable/bg"
	android:orientation="vertical"
	android:padding="10dp"
	tools:context=".FirstActivity" >

<TextView
	android:id="@+id/textView1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_centerHorizontal="true"
	android:layout_marginTop="10dp"
	android:text="Activity 1"
	android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
	android:id="@+id/start_button"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_alignParentBottom="true"
	android:layout_centerHorizontal="true"
	android:background="@android:color/holo_blue_dark"
	android:text="Start Activity 2" />
	
</RelativeLayout>

activity_second.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="fill_parent"
	android:background="@drawable/bg"
	android:orientation="vertical"
	android:padding="10dp">

	<TextView
		android:id="@+id/textView1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_centerHorizontal="true"
		android:layout_marginTop="10dp"
		android:text="Activity 2"
		android:textAppearance="?android:attr/textAppearanceLarge" />

	<LinearLayout
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:layout_alignParentBottom="true"
		android:layout_marginTop="50dp"
		android:orientation="horizontal"
		android:weightSum="2" >

		<Button
			android:id="@+id/cancel_button"
			android:layout_width="0dp"
			android:layout_height="wrap_content"
			android:layout_gravity="center"
			android:layout_margin="2dp"
			android:layout_weight="1"
			android:background="@android:color/holo_blue_dark"
			android:text="Cancel" />

		<Button
			android:id="@+id/return_button"
			android:layout_width="0dp"
			android:layout_height="wrap_content"
			android:layout_gravity="center"
			android:layout_margin="2dp"
			android:layout_weight="1"
			android:background="@android:color/holo_blue_dark"
			android:text="Return Results" />

	</LinearLayout>
</RelativeLayout>

FirstActivity.java

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;

public class FirstActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_first);

		Button start = (Button) findViewById(R.id.start_button);
		start.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View view) {
				Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
				startActivityForResult(intent, 1); 
			}
		});
	}

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

	    if (requestCode == 1){
	    	if(resultCode == RESULT_OK){
	            String result=data.getStringExtra("result");  
	            Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();	            
	        }
	        if (resultCode == RESULT_CANCELED) {    
	            //Write your code if there's no result
	            Toast.makeText(getApplicationContext(), "Nothing Returned!", Toast.LENGTH_SHORT).show();
	        }
	    }
	}

}

SecondActivity.java

package com.example.activitytest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);

		Button returnResult = (Button) findViewById(R.id.return_button);
		returnResult.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View view) {
				// returing result back
				Intent resultIntent = new Intent();
				resultIntent.putExtra("result", "Getting Smile Back!!");
				setResult(RESULT_OK, resultIntent);
				finish();

				// if you don't want to return any result
				// setResult(RESULT_CANCELED, resultIntent);
			}
		});

		Button back = (Button) findViewById(R.id.cancel_button);
		back.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				// if you don't want to return any result
				Intent resultIntent = new Intent();
				setResult(RESULT_CANCELED, resultIntent);
				finish();
			}
		});
	}
}

6. Download Complete Example

Here you can download complete eclipse project source code from GitHub.

[download url=”https://github.com/javatechig/javatechig-android-ui/tree/master/ActivityForResults”]