2016-10-18 41 views
0

我有一个ArrayList < Object>其中Object是我创建的类的实例。我想将这个新的数组列表传递回主要活动,以将其放入navigationdrawer项目中。传递ArrayList <Object>返回主活动(Android)

如何将ArrayList < Object>从活动传递回主活动?

我曾尝试bundle.getParcelableArrayList但它告诉我,“为类型参数T推断Object类型是不在其范围,应实行android.os.parcelable”

这里是我的代码:

public void createPlaylist(String playlistName, ArrayList<Song> newPlaylistSongsArray) { 
    Intent returnIntent = new Intent(); 
    Bundle b = new Bundle(); 
    b.putParcelableArrayList("array", (ArrayList<? extends Parcelable>) newPlaylistSongsArray); 
    returnIntent.putExtra("playListName", playlistName); 
    returnIntent.putExtra("array", newPlaylistSongsArray); 
    setResult(Activity.RESULT_OK,returnIntent); 
    finish(); 
} 

和:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1) { 
     if (resultCode == Activity.RESULT_OK){ 
      String newPlaylistName = data.getStringExtra("playListName"); 
      Bundle b = getIntent().getExtras(); 
      final ArrayList<Song> newPlaylist = b.getParcelableArrayList("array"); 
      Toast.makeText(MP3Player.this, "New Playlist Created", Toast.LENGTH_LONG).show(); 
     } 
     if (resultCode == Activity.RESULT_CANCELED) { 
      Toast.makeText(MP3Player.this, "Shit went wrong yo!", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 
+3

你'Object'类需要实现'Parcelable'。您无法通过意向传送复杂的数据,例如您自己的自定义对象,而无需先将它们序列化。 – b85411

+0

请注意,您有'ArrayList '而不是'ArrayList '。 –

+0

你可以声明一个单例类,并将其添加到你的类中。你可以从任何活动访问这个 –

回答

1

对于最简单的方法,你的歌声类需要实现Serializable接口。

Bundle bundle = new Bundle(); 
bundle.putSerializable("newPlaylist", newPlaylist); 
intent.putExtras(bundle); 
在其他活动

Intent intent = this.getIntent(); 
Bundle bundle = intent.getExtras(); 

ArrayList<Song> newPlaylist= 
       (ArrayList<Song>)bundle.getSerializable("newPlaylist"); 
+0

我没有设置我的歌类实现可序列化。 – Danny

相关问题