使用 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 中使用

使用putExtra()传递数据

安卓数据传递之---putextra与putextras

Android 中使用bundle.putExtra实现Activity之间的参数传递

Android 中使用intent.putExtra实现Activity之间的参数传递

使用Intent传递对象