2016-10-18 3 views
0

У меня есть ArrayList < Объект>, где Объект - это экземпляр класса I. Я хочу передать этот новый список массивов обратно в основное действие, чтобы поместить его в элемент навигации.Передача ArrayList <Object> back to main Activity (Android)

Как передать объект ArrayList < Объект> от деятельности назад к основной?

Я попытался bundle.getParcelableArrayList однако он говорит мне, что «Прогнозный Тип объект для параметра типа T не в пределах своих границ, должен осуществлять 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

Для простой способ, ваш класс Song нужно реализовывать 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

Я не задал класс песни для реализации serializable. – Danny