Android 将列表从一个活动传递到另一个活动

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11340776/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 07:04:19  来源:igfitidea点击:

Passing a List from one Activity to another

androidlistviewandroid-intentarraylist

提问by Name is Nilay

How to pass Collections like ArrayList, etc from one Activityto another as we used to pass Strings, intwith help of putExtra method of Intent?

在 Intent 的 putExtra 方法的帮助下,如何像过去一样将诸如ArrayList, etc 之类的集合从一个Activity传递到另一个?Stringsint

Can anyone please help me as i want to pass a List<String>from one Activityto another?

任何人都可以帮助我,因为我想List<String>从一个传递Activity到另一个?

回答by nhaarman

You can pass an ArrayList<E>the same way, if the Etype is Serializable.

你可以传递一个ArrayList<E>同样的方式,如果E类型Serializable

You would call the putExtra (String name, Serializable value)of Intentto store, and getSerializableExtra (String name)for retrieval.

您可以调用putExtra (String name, Serializable value)ofIntent来存储和getSerializableExtra (String name)检索。

Example:

例子:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

In the other Activity:

在另一个活动中:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");


Please note that serialization can cause performance issues: it takes time, and a lot of objects will be allocated (and thus, have to be garbage collected).

请注意,序列化可能会导致性能问题:它需要时间,并且将分配大量对象(因此必须进行垃圾回收)。

回答by Shahin ShamS

First you need to create a Parcelable object class, see the example

首先需要创建一个 Parcelable 对象类,看例子

public class Student implements Parcelable {

        int id;
        String name;

        public Student(int id, String name) {
            this.id = id;
            this.name = name;

        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }


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

        @Override
        public void writeToParcel(Parcel dest, int arg1) {
            // TODO Auto-generated method stub
            dest.writeInt(id);
            dest.writeString(name);
        }

        public Student(Parcel in) {
            id = in.readInt();
            name = in.readString();
        }

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

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

And the list

还有名单

ArrayList<Student> arraylist = new ArrayList<Student>();

Code from Calling activity

来自呼叫活动的代码

Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("mylist", arraylist);
intent.putExtras(bundle);       
this.startActivity(intent);

Code on called activity

调用活动的代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);   

    Bundle bundle = getIntent().getExtras();
    ArrayList<Student> arraylist = bundle.getParcelableArrayList("mylist");
}

回答by niky_d

I tried all the proposed techniques but none of them worked and stopped my app from working and then I finally succedded. Here is how I did it... In main activity I did this:

我尝试了所有建议的技术,但它们都不起作用,并阻止了我的应用程序工作,然后我终于成功了。这是我是如何做到的......在主要活动中,我是这样做的:

            List<String> myList...;
            Intent intent = new Intent...;
            Bundle b=new Bundle();
            b.putStringArrayList("KEY",(ArrayList<String>)myList);            
            intent_deviceList.putExtras(b);
            ....startActivity(intent);

To get the data in the new Activity:

获取新活动中的数据:

    List<String> myList...
    Bundle b = getIntent().getExtras();
    if (b != null) {
        myList = bundle.getStringArrayList("KEY");
    }

I hope this will help someone...

我希望这会帮助某人...

回答by RajaReddy PolamReddy

use putExtrato pass value to an intent. use getSerializableExtramethod to retrieve the data like this

用于putExtra将值传递给意图。使用getSerializableExtra方法来检索这样的数据

Activity A :

活动一:

ArrayList<String> list = new ArrayList<String>();

intent.putExtra("arraylist", list);
startActivity(intent);

Activity B:

活动乙:

ArrayList<String> list = getIntent().getSerializableExtra("arraylist");

回答by AkashG

To pass ArrayList from one activity to another activity, one should include

要将 ArrayList 从一个活动传递到另一个活动,应该包括

intent.putStringArrayListExtra(KEY, list); //where list is ArrayList which you want to pass

before starting the activity.And to get the ArrayList in another activity include

在开始活动之前。并在另一个活动中获取 ArrayList 包括

Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            temp = bundle.getStringArrayList(KEY); // declare temp as ArrayList
                }

you will be able to pass ArrayList through this.Hope this will be helpful to you.

您将能够通过此传递 ArrayList。希望这对您有所帮助。