2016-10-18 14 views
0

私はArrayListを持っています< Object>ここで、Objectは私が作成したクラスのインスタンスです。この新しい配列リストをメインアクティビティに戻して、ナビゲーションドレット項目に配置したいと思います。ArrayListを<Object>に戻す(Android)

どのようにArrayList <オブジェクト>をアクティビティからメインのものに戻しますか?

しかし私はそれがここ

を「typeパラメータTのための推論Object型は、その範囲内で、android.os.parcelable実装する必要がありますされていない」というのが私のコードである私に指示bundle.getParcelableArrayListを試してみました:

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

関連する問題