One of the easiest ways to pass information between activities is to use Bundles.
You can add extras to an Intent before launching a new Activity.
On the other end (the other activity) you can then receive these extras out of the Bundle and possibly rebuilt the Object in the new activity..
Here's an Example:
First of all, here's the Student Class:
Student Class - Student.java:
package com.stephendiniz.objectsharing;
public class Student
{
int id;
String name;
String profession;
Student()
{
id = 0;
name = "";
profession = "";
}
Student(int id, String name, String profession)
{
this.id = id;
this.name = name;
this.profession = profession;
}
public int getId() { return id; }
public String getName() { return name; }
public String getProfession() { return profession; }
}
The Main Activity will reference the Student class to generate an object s
Main Activity - AndroidObjectSharing.java:
package com.stephendiniz.objectsharing;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class AndroidObjectSharingActivity extends Activity
{
TextView id;
TextView name;
TextView profession;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
id = (TextView)findViewById(R.id.id);
name = (TextView)findViewById(R.id.name);
profession = (TextView)findViewById(R.id.profession);
Button submitButton = (Button)findViewById(R.id.submitButton);
submitButton.setOnClickListener(new View.OnClickListener()
{
final Intent newActivity = new Intent(AndroidObjectSharingActivity.this, NewActivity.class);
public void onClick(View v)
{
Student s = new Student(Integer.parseInt(id.getText().toString()), name.getText().toString(), profession.getText().toString());
newActivity.putExtra("extraStudentId", s.getId());
newActivity.putExtra("extraStudentName", s.getName());
newActivity.putExtra("extraStudentProfession", s.getProfession());
startActivity(newActivity);
}
});
}
}
Here's the XML that is tied to the Student Class:
Main XML Layout - main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Student ID:" />
<EditText
android:id="@+id/id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="9001" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Student Name:" />
<EditText
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Steve" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Student Profession:" />
<EditText
android:id="@+id/profession"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Computer Engineer" />
<Button
android:id="@+id/submitButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:text="Send to New Activity" />
</LinearLayout>
Note that the NewActivity accesses the information from a Bundle (named infoBundle in this case)..
The object is "rebuilt" programmatically as if it was passed.
New Activity - NewActivity.java:
package com.stephendiniz.objectsharing;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class NewActivity extends Activity
{
LinearLayout ll;
TextView id;
TextView name;
TextView profession;
private final static String TAG = "NewActivity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle infoBundle = getIntent().getExtras();
Student s = new Student(infoBundle.getInt("extraStudentId"), infoBundle.getString("extraStudentName"), infoBundle.getString("extraStudentProfession"));
ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
id = new TextView(this);
name = new TextView(this);
profession = new TextView(this);
id.setText("Student Id: " + s.getId() + "\n");
name.setText("Student Name: " + s.getName() + "\n");
profession.setText("Student Profession: " + s.getProfession() + "\n");
ll.addView(id);
ll.addView(name);
ll.addView(profession);
Button closeButton = new Button(this);
closeButton.setText("Close Activity");
closeButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
finish();
}
});
ll.addView(closeButton);
setContentView(ll);
}
}
Don't forget to add the new activity to your Manifest!
Android Manifest - AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stephendiniz.objectsharing"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".AndroidObjectSharingActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NewActivity"
android:label="New Activity" />
</application>
</manifest>
Sorry for the mix of XML and Programmatic Scripting, I realized after the first Activity that it would be a lot of files to display so I condensed the last file, but you should be able to get the idea..
Hope this helps!