Passing Data Between Activities

Download Report

Transcript Passing Data Between Activities

Passing Data Between Activities
Android Activities
• If you remember, Android stores Activities on
a stack.
• You have the ability to add as many Activities
onto the stack from you application and
needed.
• You can also pass data to and from Activities.
How to Launch a new Activity from an
Activity?
• The Activity class provides a method called
startActivity()
• startActivity() takes an Intent as an argument.
• The Intent provides the information with what
new Activity we want to create.
How to Launch a new Activity from an
Activity?
Intent i = new Intent(this, ActivityTwo.class);
startActivity(i);
How to Launch a new Activity from an
Activity?
Parm 1: The Context
Intent i = new Intent(this, ActivityTwo.class);
startActivity(i);
How to Launch a new Activity from an
Activity?
Parm 2: The Class name of the new Activity to create.
Intent i = new Intent(this, ActivityTwo.class);
startActivity(i);
Intents
• Intents are asynchronous messages which
allow Android components to request
functionality from other components of the
Android system.
• In addition to giving information about what
Activity we want to launch, Intents can also
store data to be passed between Activities.
Storing Data in the Intent
Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("UserName", "John Doe");
i.putExtra("DLNumber", 123456789);
startActivity(i);
Extracting data stored in Intent from
the new Activity
• The Activity class has a getIntent()
• Use the Intent returned from the getIntent()
to extract any data that was passed.
Extracting Data from the Intent
Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("UserName", "John Doe");
i.putExtra("DLNumber", 123456789);
startActivity(i);
Intent i = getIntent();
String name = i.getStringExtra("UserName");
int dl = i.getIntExtra("DLNumber", 0);
How to get a result from an
Activity
startActivityForResult()
• From ActivityOne, you can start ActivityTwo by
calling startActivityForResult(). Using this
method, you can specify a request code.
• When ActivityTwo is about to end, you can call
setResult() to pass data back to ActivityOne.
• Once ActivityTwo ends, if it called setResult(),
then the onActivityResult() method on
ActivityOne is executed. ActivityOne can now
access the data sent to it from ActivityTwo.
You want to take a photo?
Activity A
Activity B
Create an Intent to
Launch the Camera App
In order to get a picture
for a contact.
Contacts App
When you start the activity,
you’ll send a request code
that will be returned to you
when the launched activity
completes.
You want to take a photo?
Activity A
Activity B
Contacts App
//Code in Activity A
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
When the camera activity completes
The contacts app will
receive a call in
onActivityResult().
Contacts App
When the camera activity completes
Contacts App
//Code in Activity B
Intent intent = new Intent();
intent.putExtra();// It will put an image thumbnail into the intent’s data
//set results so Activity A gets onActivityResult() called
setResult(Activity.RESULT_OK, intent);
finish();
Implementing startActivityForResult()
• Code in ActivityOne.java
REQUEST_CODE is a user defined integer. I usually store the
REQUEST_CODE as a public static final member so it can be
accessed in both activities.
Returning result from SubActivity
Code from ActivityTwo.java
Implementing startActivityForResult()
• Code in ActivityOne.java