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

DCo*_*der 48 android bundle serializable android-intent

我想将以下ArrayList从一个活动发送到另一个活动请帮忙.

ContactBean m_objUserDetails = new ContactBean();
ArrayList<ContactBean> ContactLis = new ArrayList<ContactBean>(); 
Run Code Online (Sandbox Code Playgroud)

我在如下添加数据后发送上面的arraylist

  Intent i = new Intent(this,DisplayContact.class);
  i.putExtra("Contact_list", ContactLis);
  startActivity(i);
Run Code Online (Sandbox Code Playgroud)

但是我在恢复时遇到了问题.

ArrayList<ContactBean> l1 = new ArrayList<ContactBean>();
Bundle wrapedReceivedList = getIntent().getExtras();
l1= wrapedReceivedList.getCharSequenceArrayList("Contact_list");
Run Code Online (Sandbox Code Playgroud)

此时我收到此错误:

Type mismatch: cannot convert from ArrayList<CharSequence> to ArrayList<ContactBean>
Run Code Online (Sandbox Code Playgroud)

我的ContactBean类实现了Serializable,也请告诉我们为什么要实现可序列化的接口.

Rav*_*rya 84

ArrayList<E>如果E类型是,您可以以相同的方式传递Serializable.

你可以调用putExtra (String name, Serializable value)of Intent来存储和getSerializableExtra (String name)检索.

例:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);
Run Code Online (Sandbox Code Playgroud)

在其他活动中:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
Run Code Online (Sandbox Code Playgroud)

  • 不要使用`Serializable`,而是使用`Parcelable`代替![这就是为什么](http://www.developerphil.com/parcelable-vs-serializable/). (11认同)

小智 27

在第一项活动中:

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

在接收器活动中:

ArrayList<ContactBean> filelist =  (ArrayList<ContactBean>)getIntent().getSerializableExtra("FILES_TO_SEND");`
Run Code Online (Sandbox Code Playgroud)


Sha*_*tan 14

你需要在你的班级实现ParcelableContactBean,我为你举了一个例子:

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 
 }
Run Code Online (Sandbox Code Playgroud)

并为您的代码获取和设置:

Intent intent = new Intent(this,DisplayContact.class);
intent.putExtra("Contact_list", ContactLis);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

第二课:

ArrayList<ContactClass> myList = getIntent().getParcelableExtra("Contact_list");
Run Code Online (Sandbox Code Playgroud)


Anj*_*thi 5

使用此代码传递arraylist<customobj>给另一个Activity

首先序列化我们的联系bean

public class ContactBean implements Serializable {
      //do intialization here
}
Run Code Online (Sandbox Code Playgroud)

现在传递你的数组列表

 Intent intent = new Intent(this,name of activity.class);
 contactBean=(ConactBean)_arraylist.get(position);
 intent.putExtra("contactBeanObj",conactBean);
 _activity.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

108745 次

最近记录:

7 年,4 月 前