使用putExtra传递ArrayList <object>数据

时间:2018-03-19 01:05:45

标签: android listview android-activity arraylist

即时新手在Android上。我需要将带有customAdapter的ListView数据发送到detailActivity,以显示listView所选项目中的详细信息项目。我看过一些关于它的帖子,我仍然对此感到困惑。

你能帮助我吗?

这是我的数据类:

public class ListData {

private String title;
private String desc;

public ListData(String title, String desc) {
    this.title = title;
    this.desc = desc;
}

public String getTitle() {
    return title;
}

public String getDesc() {
    return desc;
}

}

这是我的arrayList声明:

ArrayList<ListData> data = new ArrayList<ListData>();
data.add(new ListData("Sidik Suhendar", "Telkom University"));

我不知道如何将我的arraylist数据发送到另一个活动。请帮帮我:)给我一些例子:)谢谢

3 个答案:

答案 0 :(得分:1)

您需要创建基础对象ListData parcelable:

public class ListData implements Parcelable {

    private String title;
    private String desc;

    public ListData(String title, String desc) {
        this.title = title;
        this.desc = desc;
    }

    public String getTitle() {
        return title;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public ListData(Parcel source) {
        title = source.readString();
        desc = source.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(title);
        dest.writeString(desc);

    }

    public static final Creator<ListData> CREATOR = new Creator<ListData>(){
        @Override
        public ListData createFromParcel(Parcel source) {
            return new ListData(source);
        }

        @Override
        public ListData[] newArray(int size) {
            return new ListData[size];
        }
    };
}

一旦它是可以分配的,你可以在第一个活动中完成:

ArrayList<ListData> data = new ArrayList<ListData>();
data.add(new ListData("Sidik Suhendar", "Telkom University"));
intent.putParcelableArrayListExtra("ARRAY_LIST", data);

您可以在其他活动中阅读:

ArrayList<ListData> data = (ArrayList<ListData>) getIntent().getExtras().getParcelableArrayList("ARRAY_LIST");

修改

listview.setOnItemClickListener(new OnItemClickListener(){   
    @Override
    public void onItemClick(AdapterView<?>adapter,View v, int position){
        ListData item = adapter.getItemAtPosition(position);
        Intent intent = new Intent(Activity.this,DetailActivity.class);
        intent.putExtra("ARRAY_ITEM", item);
        startActivity(intent);
    }
});

然后在目标活动中:

ListData data = (ListData) getIntent().getExtras().getParcelable("ARRAY_ITEM");

答案 1 :(得分:0)

第一步:ListData实现Parcelable:

public class ListData implements Parcelable {
private String title;
private String desc;

public ListData(String title, String desc) {
    this.title = title;
    this.desc = desc;
}

public String getTitle() {
    return title;
}

public String getDesc() {
    return desc;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.title);
    dest.writeString(this.desc);
}

protected ListData(Parcel in) {
    this.title = in.readString();
    this.desc = in.readString();
}

public static final Parcelable.Creator<ListData> CREATOR = new Parcelable.Creator<ListData>() {
    @Override
    public ListData createFromParcel(Parcel source) {
        return new ListData(source);
    }

    @Override
    public ListData[] newArray(int size) {
        return new ListData[size];
    }
};

}

第二步:发送数据:

    ArrayList<ListData> data = new ArrayList<ListData>();
    data.add(new ListData("Sidik Suhendar", "Telkom University"));
    Intent intent = new Intent(this, TargetActivity.class);
    intent.putParcelableArrayListExtra("data",data);

第三步:接收数据

ArrayList<ListData> data = intent.getParcelableArrayListExtra("data");

答案 2 :(得分:0)

您可以将序列化或parcelable用于将对象从一个活动移动到另一个活动