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

     2023-02-25     222

关键词:

【中文标题】将列表从一个活动传递到另一个活动【英文标题】:Passing a List from one Activity to another 【发布时间】:2012-07-05 15:32:45 【问题描述】:

如何通过 Intent 的 putExtra 方法将 ArrayList 等集合从一个 Activity 传递到另一个集合?

谁能帮助我,因为我想将List<String> 从一个Activity 传递给另一个?

【问题讨论】:

发帖前请先搜索一下; ***.com/… Please See this Blog. This Can Help You 【参考方案1】:

如果E 类型是Serializable,您可以以同样的方式传递ArrayList<E>

您可以调用IntentputExtra (String name, Serializable value) 进行存储,调用getSerializableExtra (String name) 进行检索。

例子:

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

在另一个活动中:

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

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

【讨论】:

+1 提到 E 必须是可序列化的,其他人似乎忘记提及了。 值得一提的是,List 接口没有扩展Serializable,因此如果您的集合是由接口声明的,则必须先将其转换为特定的实现。 注:-intent.putExtra("mylist", (Serializable)myList);为我工作! @MindRoasterMir 不客气,不,它也适用于自定义类列表 @iamkdblue 你写的我也这么说,可能是我的评论表述不正确。我是说接受的 asnwer 不适用于自定义类 List,而且还提到自定义类必须实现 Serializable 否则它将无法工作。谢谢【参考方案2】:

首先你需要创建一个 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];
            
        ;
    

还有名单

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

来自调用活动的代码

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

调用活动的代码

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

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

【讨论】:

工作就像一个魅力,一个小时后我得到了这个,非常感谢哥们。 使用可序列化比这个更好,但它对某人有好处。 +1 @HarishReddy 你能解释一下为什么使用可序列化更好吗?我认为 Parcelable 在性能方面比可序列化更好。 因为它在订单基础上工作,因为值在writeToParcel 中给出。是否有任何机制可以根据密钥从Parcel 对象获取值?例如,如果在课堂上我们有多个字符串字段,那么我们如何才能知道我们从 Student(Parcel in) 中的 Parcel 得到哪个字符串。 @HarishReddy:使用 Serializable 可以实现更简单的实现,但使用 Parcelable 可以提供更好的性能。哪个更好取决于具体情况:如果 Serializable 在您的用例中提供的性能足够,那么您应该更喜欢更简单的方法。但是,如果在您的用例中使用 Serializable 太慢,您应该尝试使用 Parcelable。【参考方案3】:

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

活动 A:

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

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

活动 B:

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

【讨论】:

嗨 RajaReddy,我将数组列表 A 活动传递给 B 活动。 B 活动我更改了一个值并返回到 A 活动值不变。请帮帮我 返回 B 活动时,您必须将数据从 B 传递到 A.. 或将该数组设为全局数组并从 B 活动更新。 就我而言,我可以选择参加 C 活动。在那种情况下,我如何更新数组列表? 然后在应用程序类中将其设置为全局...并在您想使用的任何地方更新和使用 感谢您的提示。如果可能的话,给我你的邮件ID,我会通过电子邮件提出疑问。【参考方案4】:

我尝试了所有建议的技术,但都没有奏效并阻止我的应用程序运行,然后我终于成功了。这就是我是如何做到的...... 在主要活动中,我这样做了:

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

在新的Activity中获取数据:

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

我希望这会对某人有所帮助...

【讨论】:

【参考方案5】:

要将 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。希望这对您有所帮助。

【讨论】:

【参考方案6】:

使用 ViewModel 比 Serializable 或 Parcelable 更有效

【讨论】:

如何将 LatLng 的数组列表从一个活动传递到另一个活动

】如何将LatLng的数组列表从一个活动传递到另一个活动【英文标题】:HowtopassanarrylistofLatLngfromoneactivitytoanother【发布时间】:2015-09-0509:41:26【问题描述】:我想通过按钮单击将ArrayList的LatLng变量从一个Activity传递给另一个。String... 查看详情

当我单击列表视图的操作项时,将文本从列表视图传递到另一个活动

】当我单击列表视图的操作项时,将文本从列表视图传递到另一个活动【英文标题】:PassingTextFromListviewtoanotherActivitywhenIclickactionitemofthelistview【发布时间】:2013-03-1015:04:59【问题描述】:我的主要活动中有一个列表视图。在每... 查看详情

如何将数据从 sqlite 数据库传递到另一个活动?

...我有一个包含列id,eng,kurd,ar的数据库,并从中填充了一个列表视图,该列表视图仅显示数据库中的eng。当用户单击列表视图中的项目时,我想传递具有相同id的eng,kurd,ar,但是当我单击一个项目时, 查看详情

如何将整数从一个活动传递到另一个活动?

】如何将整数从一个活动传递到另一个活动?【英文标题】:HowtopassintegerfromoneActivitytoanother?【发布时间】:2011-10-2719:05:03【问题描述】:我想将一个整数的新值从一个活动传递到另一个活动。即:活动B包含一个integer[]pics=R.drawa... 查看详情

将图像从活动传递到另一个活动?

】将图像从活动传递到另一个活动?【英文标题】:Passingimagefromactivitytoanotheractivity?【发布时间】:2012-03-0523:12:19【问题描述】:我正在尝试拍照,我想将这张照片传递给另一个活动以在其中显示。OnClickListenerlistener_TakePic=newOnCl... 查看详情

我如何将数据从一个活动传递到另一个活动

】我如何将数据从一个活动传递到另一个活动【英文标题】:howipassdatafromoneactivitytoanotheractivity【发布时间】:2015-12-3120:26:37【问题描述】:packagecom.example.assignmentone;importjava.util.ArrayList;importandroid.R.integer;importandroid.app.Activity;impor... 查看详情

如何将用户定义的对象从一个活动传递到另一个活动[重复]

】如何将用户定义的对象从一个活动传递到另一个活动[重复]【英文标题】:howtopassauserdefinedobjectfromoneactivitytoanother[duplicate]【发布时间】:2012-10-1122:35:31【问题描述】:可能重复:HowtopassobjectfromoneactivitytoanotherinAndroid我想将一... 查看详情

java示例代码_将字符串从一个活动传递到另一个活动

java示例代码_将字符串从一个活动传递到另一个活动 查看详情

将数据从列表视图(从 Rest Api 生成)传递到另一个活动并将其保存到 SQLite 数据库中

】将数据从列表视图(从RestApi生成)传递到另一个活动并将其保存到SQLite数据库中【英文标题】:passDatafromaListView(generatedfromRestApi)toanotheractivityandsavethatintoSQLiteDatabase【发布时间】:2016-11-0115:24:11【问题描述】:我正在使用RESTap... 查看详情

无法将类的对象从一个活动传递到另一个活动? [复制]

】无法将类的对象从一个活动传递到另一个活动?[复制]【英文标题】:Unabletopassanobjectofaclassfromoneactivitytoanother?[duplicate]【发布时间】:2013-08-1113:18:53【问题描述】:在传递类中传递对象的代码finalArrayList<SongDetails>Songinfo=get... 查看详情

Android:将信息从一个活动传递到另一个[重复]

】Android:将信息从一个活动传递到另一个[重复]【英文标题】:Android:Passinformationfromoneactivitytoanother[duplicate]【发布时间】:2018-01-1314:23:39【问题描述】:我正在尝试将信息(更具体地说是带有信息的类)从一个活动传递到另一... 查看详情

如何将不可打包的对象从活动传递到另一个活动?

】如何将不可打包的对象从活动传递到另一个活动?【英文标题】:Howtopassnonparcelableobjectstofromactivitytoanotheractivity?【发布时间】:2016-01-0521:19:04【问题描述】:我有两个对象从两个不同的类实例化,两个类都没有实现parcelable或s... 查看详情

我们可以将 soundpool id 从一个活动传递到另一个活动吗?

】我们可以将soundpoolid从一个活动传递到另一个活动吗?【英文标题】:Canwepasssoundpoolidfromoneactivitytoother?【发布时间】:2012-06-1309:40:58【问题描述】:我是安卓新手。我正在开发一个应用程序,我需要为不同的活动加载许多声音... 查看详情

如何将值从一个活动中的片段传递到另一个活动? [复制]

】如何将值从一个活动中的片段传递到另一个活动?[复制]【英文标题】:Howtopassvaluesfromfragmentsinoneactivitytoanotheractivity?[duplicate]【发布时间】:2021-08-0202:23:47【问题描述】:我正在一个有两个活动的应用程序中做一个小测验。一... 查看详情

使用捆绑将数据从一个活动传递到另一个活动 - 不在第二个活动中显示

】使用捆绑将数据从一个活动传递到另一个活动-不在第二个活动中显示【英文标题】:Passingdatafromoneactivitytoanotherusingbundle-notdisplayinginsecondactivity【发布时间】:2013-03-0422:07:16【问题描述】:我目前正在尝试获取通过RESTAPI调用获... 查看详情

将包含其他自定义对象的对象列表从一个活动发送到另一个活动

】将包含其他自定义对象的对象列表从一个活动发送到另一个活动【英文标题】:Sendlistofobjectswhichcontainothercustomobjectsfromoneactivitytoanother【发布时间】:2014-12-0508:15:37【问题描述】:这是我的班级,我想将其列表发送到另一个活... 查看详情

如何将 ArrayList<Custom Object> 从一个活动传递到另一个活动? [复制]

】如何将ArrayList<CustomObject>从一个活动传递到另一个活动?[复制]【英文标题】:HowtopassArrayList<CustomeObject>fromoneactivitytoanother?[duplicate]【发布时间】:2014-02-1014:05:37【问题描述】:我想将FollowArrayList从一个活动发送到另... 查看详情

android-将toast从一个活动传递到另一个活动(代码片段)

不确定这是否有效但我正在尝试从CustomerCall活动向RiderHome活动发送Toast消息。一旦司机选择取消。需要将Toast发送到RiderHome活动,说“驱动程序已取消请求”可以这样做吗?CustomerCallbtnCancel=(Button)findViewById(R.id.btnDecline);btnCancel.setO... 查看详情