如何通过ArrayList
从其他活动收到自定义Intent
?例如,我在活动A中有ArrayList
:
ArrayList<Song> songs;
我如何在活动B中获得此列表?
答案 0 :(得分:6)
要理解的第一部分是使用Intent
对象将活动A中的信息传递给活动B,在其中可以放置“extras”。您可以在Intent
中找到可以放在putExtra()
内的完整列表:https://developer.android.com/reference/android/content/Intent.html(请参阅各种putFooExtra()
方法以及下面的ArrayList<Song>
方法。)
由于您尝试传递putParcelableArrayListExtra()
,因此您有两种选择。
第一个也是最好的是使用Song
。要使用它,Parcelable
类必须实现Song
接口。如果您控制Parcelable
的源代码,则实施Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putParcelableArrayListExtra("songs", songs);
相对容易。您的代码可能如下所示:
Song
第二种是使用version of putExtra()
that accepts a Serializable
object。只有在不控制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");
如果您选择了第二个,您将编写如下内容:
document.title
第一种技术的优势在于它更快(就应用程序的用户性能而言)而且占用的空间更少(就您传递的数据大小而言)。
答案 1 :(得分:3)
Misam正在发送歌曲列表,因此无法使用普通putStringArrayList()
。相反,Song类必须实现Parcelable接口。我已经解释了如何在帖子here中实现Parcelable painless。
实施Parcelable界面后,只需按照Uddhavs的回答进行小修改:
// First activity, adding to bundle
bundle.putParcelableArrayListExtra("myArrayListKey", arrayList);
// Second activity, reading from bundle
ArrayList<Song> list = getIntent().getParcelableArrayListExtra("myArrayListKey");
答案 2 :(得分:1)
在Java中发送一个字符串arrayList,你可以使用,
intent.putStringArrayListExtra("key", skillist <- your arraylist);
和
List<String> listName = getIntent().getStringArrayListExtra("key");
答案 3 :(得分:0)
希望对您有帮助。
1。您的Song类应该是Parcelable Class的实现
public class Song implements Parcelable {
//Your setter and getter methods
}
2。将您的数组列表放入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());
}
}
});
}
答案 4 :(得分:-1)
请注意, 捆绑是Android系统中用于组件间通信的关键组件之一。您需要考虑的是如何使用将数组放入该包中。
发送方(活动A)
Intent intent1 = new Intent(MainActivity.this, NextActivity.class);
Bundle bundle = new Bundle();
Parcelable[] arrayList = new Parcelable[10];
/ *注意:你必须使用writeToParcel()方法来编写Song对象的不同参数值* /
/* 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");