通过Intent发送Arraylist

时间:2017-08-01 19:45:03

标签: android android-intent

如何通过ArrayList从其他活动收到自定义Intent?例如,我在活动A中有ArrayList

ArrayList<Song> songs;

我如何在活动B中获得此列表?

5 个答案:

答案 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");