如何将 ArrayList<CustomeObject> 从一个活动传递到另一个活动?

55

我想从一个活动中发送以下ArrayList到另一个活动,请帮忙。

ContactBean m_objUserDetails = new ContactBean();
ArrayList<ContactBean> ContactLis = new ArrayList<ContactBean>(); 
我在添加数据后,将上述ArrayList发送如下:

我在添加数据后,将上述ArrayList发送如下

  Intent i = new Intent(this,DisplayContact.class);
  i.putExtra("Contact_list", ContactLis);
  startActivity(i);
但是我在恢复它时遇到了问题。
ArrayList<ContactBean> l1 = new ArrayList<ContactBean>();
Bundle wrapedReceivedList = getIntent().getExtras();
l1= wrapedReceivedList.getCharSequenceArrayList("Contact_list");

目前我遇到了这个错误:

Type mismatch: cannot convert from ArrayList<CharSequence> to ArrayList<ContactBean>

我的ContactBean类实现了Serializable接口,请告诉我为什么我们要实现Serializable接口。


3
https://dev59.com/2WUo5IYBdhLWcg3wvRpF - Raghunandan
让您的自定义对象可序列化Parcelable。 - kalyan pvs
接受答案,复制自 https://dev59.com/YGgu5IYBdhLWcg3wZma8#11340842/ - General Grievance
3个回答

31

在第一个活动中:

ArrayList<ContactBean> fileList = new ArrayList<ContactBean>();
Intent intent = new Intent(MainActivity.this, secondActivity.class);
intent.putExtra("FILES_TO_SEND", fileList);
startActivity(intent);

在接收器活动中:

ArrayList<ContactBean> filelist =  (ArrayList<ContactBean>)getIntent().getSerializableExtra("FILES_TO_SEND");`

似乎不起作用了,我的应用程序一直崩溃。 - Kartik Garasia

15

你需要在你的ContactBean类中实现Parcelable,我为你提供了一个示例:

你需要在你的ContactBean类中实现Parcelable,我为你提供了一个示例:

public class ContactClass implements Parcelable {

private String id;
private String photo;
private String firstname;
private String lastname;

public ContactClass()
{

}

private ContactClass(Parcel in) {
    firstname = in.readString();
    lastname = in.readString();
    photo = in.readString();
    id = in.readString();

}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {

    dest.writeString(firstname);
    dest.writeString(lastname);
    dest.writeString(photo);
    dest.writeString(id);

}

 public static final Parcelable.Creator<ContactClass> CREATOR = new Parcelable.Creator<ContactClass>() {
        public ContactClass createFromParcel(Parcel in) {
            return new ContactClass(in);
        }

        public ContactClass[] newArray(int size) {
            return new ContactClass[size];

        }
    };

   // all get , set method 
 }

并且这是你的代码中用到的获取和设置:

Intent intent = new Intent(this,DisplayContact.class);
intent.putExtra("Contact_list", ContactLis);
startActivity(intent);

二等舱:

ArrayList<ContactClass> myList = getIntent().getParcelableExtra("Contact_list");

我相信你的意思是:ArrayList<ContactClass> myList 而不是 ArrayList<String> myList - gunar
我从未使用过Parcelable。但是我了解到Parcelable比Serializable快10倍,所以我期待着使用Parcelable。我的ContactBean类中有getter和setter方法,我只需在创建其对象后将数据存储在类变量中,然后将该对象添加到ArrayList<ContactBean>中。如果该类是可Parcelable的,这是否可行? - DCoder
抱歉,我不明白你的意思,但是如果我想简单地告诉你,你需要以上两种方法和getter和setter方法。我编辑了我的类。 - Shayan Pourvatan
好的,谢谢。我一定会尝试它。 - DCoder
@VarunKarhadkar 是可以的,如果不可能的话,那我们为什么要使用它呢?抱歉,我第一次很忙,没有理解你的意思。 - Shayan Pourvatan
显示剩余6条评论

5

使用以下代码将 arraylist<customobj> 传递到另一个 Activity

首先对我们的联系人 bean 进行序列化

public class ContactBean implements Serializable {
      //do intialization here
}

现在传递你的 ArrayList。
 Intent intent = new Intent(this,name of activity.class);
 contactBean=(ConactBean)_arraylist.get(position);
 intent.putExtra("contactBeanObj",conactBean);
 _activity.startActivity(intent);

如何在TextView中设置值? - Ali
哪个值? - Anjali Tripathi
下一个活动中的aaraylist - Ali
你想将整个ArrayList的数据设置到TextView中吗? - Anjali Tripathi
no some fields.. - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接