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

Android 将列表从一个活动传递到另一个活动,android,listview,android-intent,arraylist,Android,Listview,Android Intent,Arraylist,如何将像ArrayList这样的集合从一个活动传递到另一个活动,就像我们使用putExtra方法传递字符串,int一样 当我想将列表从一个活动传递到另一个活动时,有人能帮我吗?如果E类型为可序列化,您可以用同样的方式传递数组列表 您可以调用Intent的putExtra(字符串名称,可序列化值)进行存储,并调用getSerializableExtra(字符串名称)进行检索 例如: ArrayList<String> myList = new ArrayList<String&g

如何将像
ArrayList
这样的集合从一个
活动
传递到另一个
活动,就像我们使用putExtra方法传递
字符串
int
一样


当我想将
列表
从一个
活动
传递到另一个
活动时,有人能帮我吗?

如果
E
类型为
可序列化
,您可以用同样的方式传递
数组列表

您可以调用
Intent
putExtra(字符串名称,可序列化值)
进行存储,并调用
getSerializableExtra(字符串名称)
进行检索

例如:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);
ArrayList myList=new ArrayList();
intent.putExtra(“mylist”,mylist);
在其他活动中:

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


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

使用
putExtra
将值传递给intent。使用
getSerializableExtra
方法检索数据 像这样

活动A:

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

intent.putExtra("arraylist", list);
startActivity(intent);
ArrayList list=new ArrayList();
intent.putExtra(“arraylist”,列表);
星触觉(意向);
活动B:

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

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

intent.putStringArrayListExtra(KEY, list); //where list is ArrayList which you want to pass
在启动活动之前。要在另一个活动中获取ArrayList,请包括

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

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

我尝试了所有建议的技术,但都没有成功,并阻止了我的应用程序工作,最后我成功了。这就是我是怎么做到的。。。 在主要活动中,我这样做:

            List<String> myList...;
            Intent intent = new Intent...;
            Bundle b=new Bundle();
            b.putStringArrayList("KEY",(ArrayList<String>)myList);            
            intent_deviceList.putExtras(b);
            ....startActivity(intent);
List myList。。。;
意图=新意图。。。;
Bundle b=新Bundle();
b、 putStringArrayList(“KEY”,(ArrayList)myList);
意图(b);;
..开始触觉(意图);
要获取新活动中的数据,请执行以下操作:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
    List<String> myList...
    Bundle b = getIntent().getExtras();
    if (b != null) {
        myList = bundle.getStringArrayList("KEY");
    }
列出我的列表。。。
Bundle b=getIntent().getExtras();
如果(b!=null){
myList=bundle.getStringArrayList(“键”);
}

我希望这将帮助某人…

首先,您需要创建一个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];
            }
        };
    }
被调用活动的代码
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_秒);
Bundle Bundle=getIntent().getExtras();
ArrayList ArrayList=bundle.getParcelableArrayList(“mylist”);
}

+1提到E必须是可序列化的,其他人似乎忘记了提到这一点。值得一提的是,
List
接口不扩展
Serializable
,因此如果您的集合是由接口声明的,您必须首先将其强制转换为特定的实现。注意:-intent.putExtra(“mylist”,(可序列化)myList);为我工作!@mindbroastermir不客气,不,它也为自定义类工作List@iamkdblue您正在编写,我也说过同样的话,可能是我的评论表述不正确。我是说,接受的asnwer不适用于自定义类列表,还需要指出的是,自定义类必须实现可序列化,否则它将无法实现不起作用。谢谢发布前请进行搜索;您好,RajaReddy,我将数组列表a活动传递给B活动。B活动我已更改了一个值,并返回到一个活动值不变。请帮助我返回B活动时,您必须将数据从B传递到a…或将该数组作为全局数组并从B活动更新。在我的cas中e我可以选择进行C活动。在这种情况下,我如何更新arraylist?然后在应用程序类中将其设置为全局…并在任何你想使用的地方更新和使用。感谢你的提示。如果可能,请给我你的邮件id,我将通过电子邮件询问疑问。工作得很有魅力,一小时后我收到了这个,非常感谢老兄。最好使用seria那么这只蜥蜴就可以了,但它对某人有好处+1@HarishReddy您能解释一下为什么使用serializable更好吗?我认为Parcelable在性能上优于serializable。因为它是基于订单工作的,因为值在
writeToParcel
中给出。是否有任何机制可以基于键从
Parcel
对象获取值?。例如,如果在课堂上我们有多个字符串字段,那么我们如何才能知道我们从
学生中的
包裹中得到的是哪个字符串
@Haristhedy:使用Serializable可以实现更简单的实现,但使用Parcelable可以提供更好的性能。哪一个更好取决于具体情况:如果Serializable在您的用例中提供的性能足够,那么您应该选择更简单的方法。但是如果在您的用例中使用Serializable速度太慢,您应该尝试使用Parcelable。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);   

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