android arraylist parcelable

android - Pase ArrayList<? implementa Parcelable> a Activity



(4)

Debería usar el método putParcelableArrayListExtra() en la clase Intent .

He buscado algunos temas pero no he encontrado una solución a mi problema.

public class Series implements Parcelable { private String name; private int numOfSeason; private int numOfEpisode; /** Constructors and Getters/Setters have been removed to make reading easier **/ public Series(Parcel in) { String[] data = new String[3]; in.readStringArray(data); this.name = data[0]; this.numOfSeason = Integer.parseInt(data[1]); this.numOfEpisode = Integer.parseInt(data[2]); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeStringArray(new String[] { this.name, String.valueOf(this.numOfSeason), String.valueOf(this.numOfEpisode) }); } private void readFromParcel(Parcel in) { name = in.readString(); numOfSeason = in.readInt(); numOfEpisode = in.readInt(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Series createFromParcel(Parcel in) { return new Series(in); } @Override public Series[] newArray(int size) { return new Series[size]; } };

}

En mi MainActivity tengo una ArrayList. Para que la lista sea editable de forma dinámica, necesito pasarla a otra actividad donde pueda editarla.

ArrayList<Series> listOfSeries = new ArrayList<Series>(); public void openAddActivity() { Intent intent = new Intent(this, AddActivity.class); intent.putParcelableArrayListExtra( "com.example.episodetracker.listofseries", (ArrayList<? extends Parcelable>) listOfSeries); startActivity(intent); }

Necesito lanzar la lista; de lo contrario, Eclipse me da el siguiente mensaje de error. El método putParcelableArrayListExtra (String, ArrayList) en el tipo Intent no es aplicable para los argumentos (String, List)

¿Es esta la forma correcta de hacerlo?

ArrayList<Series> list = savedInstanceState .getParcelableArrayList("com.example.episodetracker.listofseries");

Esta es la forma en que trato de leer los datos en otra actividad.

Está chocando en la línea de arriba. es decir, la parte getParcelableArrayList.


He usado putParcelableArrayList(<? extends Parcelable>) desde un objeto Bundle . No directamente de un objeto intencionado. (Realmente no sé cuál es la diferencia). pero uso para usar de esta manera:

ArrayList<ParcelableRow> resultSet = new ArrayList<ParcelableRow>(); resultSet = loadData(); Bundle data = new Bundle(); data.putParcelableArrayList("search.resultSet", resultSet); yourIntent.putExtra("result.content", data); startActivity(yourIntent);

Más adelante en su nueva actividad puede completar los datos recientemente insertados en el objeto Bundle de esta manera:

Bundle data = this.getIntent().getBundleExtra("result.content"); ArrayList<ParcelableRow> result = data.getParcelableArrayList("search.resultset");

Solo recuerde que su ArrayList<> debe contener solo objetos que se pueden parcelar. y solo para asegurarse de que ha pasado los datos, puede verificar si los datos recibidos son nulos o no, solo para evitar problemas.


Tal vez esto ayude a alguien ... más, mi problema fue que utilicé write y readValue, pero debería coincidir con type como writeInt, readInt writeString, readString, etc.


  • El problema está en escribir en el paquete y leer desde el paquete ...

    @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(numOfSeason); dest.writeInt(numOfEpisode); } private void readFromParcel(Parcel in) { name = in.readString(); numOfSeason = in.readInt(); numOfEpisode = in.readInt(); }

  • Lo que escribes tiene que coincidir con lo que lees en ...

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(this,SecondActivity.class); ArrayList<testparcel> testing = new ArrayList<testparcel>(); i.putParcelableArrayListExtra("extraextra", testing); startActivity(i); } /**********************************************/ public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<testparcel> testing = this.getIntent().getParcelableArrayListExtra("extraextra"); } }

  • El código anterior tiene onCreate () de dos actividades diferentes. El primero lanza el segundo; y funciona bien, pude tirar el paquete sin problemas.