This question already has an answer here:
-
How to send an object from one Android Activity to another using Intents?
34 answers
I need to pass a class object to another activity via intent. Here is my class code:
public class Model
{
private String Name;
private ArrayList<Trim> trim;
public String getName()
{
return Name;
}
public void setName(String Name)
{
this.Name = Name;
}
public ArrayList<Trim> getTrim()
{
return trim;
}
public void setTrim(ArrayList<Trim> trim)
{
this.trim = trim;
}
}
To pass an object to another activity you need to implement Parcelable.
Review Writing Parcelable classes for Android carefully. Here they are using Hashmap to store the values and pass the object to another class.
OR
Make one class, ObjectA
. In that, I used all the setter and getter methods.
package com.ParcableExample.org;
import android.os.Parcel;
import android.os.Parcelable;
/**
* A basic object that can be parcelled to
* transfer between objects.
*/
public class ObjectA implements Parcelable
{
private String strValue = null;
private int intValue = 0;
/**
* Standard basic constructor for non-parcel
* object creation.
*/
public ObjectA()
{
}
/**
*
* Constructor to use when re-constructing object
* from a parcel.
*
* @param in a parcel from which to read this object.
*/
public ObjectA(Parcel in)
{
readFromParcel(in);
}
/**
* Standard getter
*
* @return strValue
*/
public String getStrValue()
{
return this.strValue;
}
/**
* Standard setter
*
* @param strValue
*/
public void setStrValue(String strValue)
{
this.strValue = strValue;
}
/**
* Standard getter
*
* @return intValue
*/
public Integer getIntValue()
{
return this.intValue;
}
/**
* Standard setter
*
* @param strValue
*/
public void setIntValue(Integer intValue)
{
this.intValue = intValue;
}
@Override
public int describeContents()
{
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
// We just need to write each field into the
// parcel. When we read from parcel, they
// will come back in the same order
dest.writeString(this.strValue);
dest.writeInt(this.intValue);
}
/**
*
* Called from the constructor to create this
* object from a parcel.
*
* @param in parcel from which to re-create object.
*/
public void readFromParcel(Parcel in)
{
// We just need to read back each
// field in the order that it was
// written to the parcel
this.strValue = in.readString();
this.intValue = in.readInt();
}
/**
*
* This field is needed for Android to be able to
* create new objects, individually or as arrays.
*
* This also means that you can use use the default
* constructor to create the object and use another
* method to hyrdate it as necessary.
*/
@SuppressWarnings("unchecked")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator()
{
@Override
public ObjectA createFromParcel(Parcel in)
{
return new ObjectA(in);
}
@Override
public Object[] newArray(int size)
{
return new ObjectA[size];
}
};
}
Then make one Activity that is used to send the Object to another activity.
package com.ParcableExample.org;
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 ParcableExample extends Activity
{
private Button btnClick;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initControls();
}
private void initControls()
{
btnClick = (Button)findViewById(R.id.btnClick);
btnClick.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
ObjectA obj = new ObjectA();
obj.setIntValue(1);
obj.setStrValue("Chirag");
Intent i = new Intent(ParcableExample.this,MyActivity.class);
i.putExtra("com.package.ObjectA", obj);
startActivity(i);
}
});
}
}
Now finally make one another activity that read the Object and get the value from that.
package com.ParcableExample.org;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MyActivity extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle bundle = getIntent().getExtras();
ObjectA obj = bundle.getParcelable("com.package.ObjectA");
Log.i("---------- Id ",":: "+obj.getIntValue());
Log.i("---------- Name ",":: "+obj.getStrValue());
}
}
You need to implement Serializable
in your Model
class. Then, to pass a Model
object from source Activity
to destination Activity
, use the following code in the source Activity
:
Model objModel = new Model();
Intent modelActivity = (Model.this, detail.class);
intent.putExtra("ModelObject", objModel);
And this code in the destination Activity
:
Model modelObject = getIntent().getSerializableExtra("ModelObject");
Your class should implement Parcelable
interface and then you can send it to another Activity
using:
MyClass myObject;
//...
intent=new Intent(this, MyAnotherActivity.class);
intent.putExtra("mydata", (Parcelable )myObject);
this.startActivity(intent);