首先要理解的是,您使用以下方法将信息从 Activity A 传递到 Activity B:Intent
对象,您可以在其中放置“额外内容”。您可以放入的内容的完整列表Intent
可以在这里找到:https://developer.android.com/reference/android/content/Intent.html https://developer.android.com/reference/android/content/Intent.html(参见各种putExtra()
方法,以及putFooExtra()
方法如下)。
由于您正在尝试通过ArrayList<Song>
,你有两个选择。
第一个,也是最好的,是使用putParcelableArrayListExtra()
。要使用此功能,Song
类必须实现Parcelable
界面。如果你控制了源代码Song
,实施Parcelable
相对容易。您的代码可能如下所示:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putParcelableArrayListExtra("songs", songs);
第二种是使用的版本putExtra()接受一个Serializable object https://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String,%20java.io.Serializable)。仅当您不控制源代码时才应使用此选项Song
,因此无法实施Parcelable
。您的代码可能如下所示:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putSerializableExtra("songs", songs);
这就是您将数据放入Intent
在活动 A 中,如何从Intent
在活动B中?
这取决于您在上面选择的选项。如果您选择第一个,您将编写如下所示的内容:
List<Song> mySongs = getIntent().getParcelableArrayListExtra("songs");
如果您选择第二个,您将编写如下所示的内容:
List<Song> mySongs = (List<Song>) getIntent().getSerializableExtra("songs");
第一种技术的优点是它速度更快(就应用程序对用户的性能而言)并且占用更少的空间(就您传递的数据大小而言)。