帮助将对象的ArrayList传递给新的Activity

我有一个对象的arraylist。 即ArrayList。

我想把它传递给一个新的Activity。 我试图使用putParcelableArrayList,但它有对象的问题。 我从variables的创建中删除了部分并且该方法有效,但后来我得到了eciplse抱怨不安全的东西。

如何将此arrayList传递给新的Activity

谢谢你的时间

编辑我试过这个:

ArrayList arraylist = new Arraylist(); Bundle bundle = new Bundle(); bundle.putParcelableArrayList("arraylist", arraylist); 

我收到以下错误:

 The method putParcelableArrayList(String, ArrayList) in the type Bundle is not applicable for the arguments (String, ArrayList) 

EDIT2对象示例代码。 我是否需要将此更改为paracbale才能工作?

 public class ObjectName { private int Value1; private int Value2; private int Value3; public ObjectName (int pValue1, int pValue2, int Value3) { Value1 = pValue1; Value2 = pValue2; Value3 = pValue3; } // Get Statements for each value below public int getValue1() { return Value1; } // etc 

Solutions Collecting From Web of "帮助将对象的ArrayList传递给新的Activity"

您的对象类应该实现parcelable。 下面的代码可以帮助您入门。

  public class ObjectName implements Parcelable { // Your existing code public ObjectName(Parcel in) { super(); readFromParcel(in); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public ObjectName createFromParcel(Parcel in) { return new ObjectName(in); } public ObjectName[] newArray(int size) { return new ObjectName[size]; } }; public void readFromParcel(Parcel in) { Value1 = in.readInt(); Value2 = in.readInt(); Value3 = in.readInt(); } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(Value1); dest.writeInt(Value2); dest.writeInt(Value3); } } 

要使用上面这样做:

在’发送’活动中使用:

 ArrayList arraylist = new Arraylist(); Bundle bundle = new Bundle(); bundle.putParcelableArrayList("arraylist", arraylist); 

在’接收’活动中使用:

 Bundle extras = getIntent().getExtras(); ArrayList arraylist = extras.getParcelableArrayList("arraylist"); ObjectName object1 = arrayList[0]; 

等等。

非常简单的方法,尝试以下方法:

 bundle.putSerializable("lstContact", (Serializable) lstObject); lstObj = (List) bundle.getSerializable("lstContact"); 

您还需要从Serializable接口实现Contact类。 例如:

 public class Contact implements Serializable{ ... ... ... } 

你有两个选择:

  • ArrayList中的对象根据方法putParcelableArrayList ()要求放置实现Parceable

  • 或者对象可以实现Serializable并使用putSerializable()方法添加ArrayList,即bundle.putSerializable("arraylist", arraylist);

Android通过序列化和反序列化(通过Serializable或Parcelable)传递Bundle中的Object。 因此,要在Bundle中传递的所有对象都必须实现这两个接口中的一个。

大多数Object使用Serializable轻松Serializable ,实现Serializable并向类添加静态UID要比编写Parcelable所需的所有方法/类要简单得多。

查看putParcelableArrayList的文档,看起来您的ObjectName需要扩展’Parcelable’接口才能使其工作。 你得到的错误似乎也表明了这一点。

我会看这里: http : //developer.android.com/reference/android/os/Parcelable.html

您可以使用Serializable接口传递您的arraylist。 (序列化是将对象转换为字节流以便存储对象或将其传输到内存,数据库或文件的过程。)

 public class ObjectName implements Serializable{ private int Value1; private int Value2; private int Value3; public ObjectName (int pValue1, int pValue2, int Value3) { Value1 = pValue1; Value2 = pValue2; Value3 = pValue3; } // Get Statements for each value below public int getValue1() { return Value1; } // etc } 

现在在你当前的活动中

 // here is the arrayList of yours ArrayList objNamesList = new ArrayList<>(); objNamesList.add(new ObjectName(1,1,1)); objNamesList.add(new ObjectName(2,2,2)); //intialize bundle instance Bundle b = new Bundle(); //adding data into the bundle //key => objNames referece for the arrayList //value => objNamesList , name of the arrayList //cast the arraylist into Serializable b.putSerializable("objNames", (Serializable) objNamesList); //init the intent Intent i = new Intent(CurrentActivity.this, NextActivity.class); i.putExtras(b); startActivity(i); 

在下一个活动中,您需要按照以下步骤来获取arraylist

 public class NextActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_next_activity); // get the bundle Bundle b = getIntent().getExtras(); ArrayList q = (ArrayList) b.getSerializable("objNames"); } } 

当我必须这样做时,我只需将对象的ArrayList放入extras包中(它必须是一个ArrayList,List显然不是Serializable)。 然后,您需要做的就是确保列表中的对象也可以序列化。

您可以在某些类中使用public static字段。

请参阅此处获取更多建议。

我正在努力解决同样的问题,并find了一种更好的方法,可以将我的数组放在Global Class中,可以在所有活动中访问。 感谢这篇文章描述了如何使用可以跨多个活动访问的全局variables。

我的全球课是

public class GlobalClass extends Application{ public MyObject[] objArray }

Android Manifest Change

 android:name=".GlobalClass" 

作为多个活动访问

 GlobalClass g = (GlobalClass)getApplicationContext(); g.objArray[0].x = 100; int x = g.objArray[0].x; 

为了更好地理解,请通过post。