如何通过 Intent
从另一个活动接收自定义的 ArrayList
?例如,在 Activity A 中有这个 ArrayList
:
ArrayList<Song> songs;
我该如何在B活动中获取此列表?
如何通过 Intent
从另一个活动接收自定义的 ArrayList
?例如,在 Activity A 中有这个 ArrayList
:
ArrayList<Song> songs;
Intent
对象将信息从 Activity A 传递到 Activity B,并在其中放置“extras”。您可以在此处查看可放置在 Intent
中的完整列表: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);
Serializable
对象的 putExtra()
版本。当你无法控制 Song
的源代码并因此无法实现 Parcelable
时,才应该使用此选项。你的代码可能如下所示:Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putSerializableExtra("songs", songs);
List<Song> mySongs = getIntent().getParcelableArrayListExtra("songs");
List<Song> mySongs = (List<Song>) getIntent().getSerializableExtra("songs");
putStringArrayList()
。相反,Song类必须实现Parcelable接口。我已经在这里的帖子中解释了如何轻松实现Parcelable。// First activity, adding to bundle
bundle.putParcelableArrayListExtra("myArrayListKey", arrayList);
// Second activity, reading from bundle
ArrayList<Song> list = getIntent().getParcelableArrayListExtra("myArrayListKey");
希望这可以帮助您。
1. 您的Song类应实现Parcelable类
public class Song implements Parcelable {
//Your setter and getter methods
}
2. 将您的ArrayList放入putParcelableArrayListExtra()中
public class ActivityA extends AppCompatActivity {
ArrayList<Song> songs;
@Override
protected void onCreate(Bundle savedInstanceState) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(), ActivityB.class)
.putParcelableArrayListExtra("songs", (ArrayList<? extends Parcelable>) songs));
}
});
}
3. 在 ActivityB 中
public class ActivityB extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
final ArrayList<Song> songs = intent.getParcelableArrayListExtra("songs");
//Check the value in the console
buttonCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (Song value : songs) {
System.out.println(value.getTitle());
}
}
});
}
要在Java中发送一个字符串数组列表,你可以使用以下代码:
intent.putStringArrayListExtra("key", skillist <- your arraylist);
并且
List<String> listName = getIntent().getStringArrayListExtra("key");
Intent intent1 = new Intent(MainActivity.this, NextActivity.class);
Bundle bundle = new Bundle();
Parcelable[] arrayList = new Parcelable[10];
/* you can add more string values in your arrayList */
bundle.putParcelableArray("myParcelableArray", arrayList);
intent1.putExtra("myBundle", bundle);
startActivity(intent1);
接收方(活动B)
Bundle bundle2 = getIntent().getBundleExtra("myBundle"); /* you got the passsed bundle */
Parcelable[] arrayList2 = bundle.getParcelableArray("myParcelableArray");