使用 putExtra 传递 ArrayList<Object> 数据
Posted
技术标签:
【中文标题】使用 putExtra 传递 ArrayList<Object> 数据【英文标题】:Passing ArrayList<Object> data using putExtra 【发布时间】:2018-08-27 12:14:02 【问题描述】:我是安卓新手。我需要使用 customAdapter 将数据从 ListView 发送到 detailActivity,以显示来自 listView 选定项目的详细信息项目。我看过一些关于它的帖子,但我仍然对此感到困惑。
你会帮我吗?
这是我的数据类:
公共类 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"));
我不知道如何将我的数组列表数据发送到另一个活动。请帮助我:)也给我一些例子:)谢谢
【问题讨论】:
【参考方案1】:您需要使基础对象 ListData 可打包:
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 个问题。我使用 listView,我也需要发送数据位置吗? 是的,如果您只需要在数组列表中显示其中一项的信息。如果你想这样做,你可以简单地只发送你想显示的 ListData 项目,一旦它是 Parcelable ,它就可以添加到 Intent Extras 中。 对不起:(你能给我举个例子吗:) 谢谢老兄!你拯救了我的一天:)【参考方案2】:第一步: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");
【讨论】:
谢谢老兄:)!我还有 1 个问题。我使用 listView,我也需要发送数据位置吗? 可以发也可以不发,看你是否需要以上是关于使用 putExtra 传递 ArrayList<Object> 数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 putExtra 传递数据并在 onClick 中使用
Android 中使用bundle.putExtra实现Activity之间的参数传递