But I can not find how I should write to get an array of List
Short answer: you cannot. You can only pass an ArrayList<String> and then get it with
getIntent().getStringArrayListExtra("key");
But . If you want to pass custom objects through Intent, which your objects must implement:
You can choose one of them. Both work the same, but have different implementations.
Batch Interface:
If you choose the Parcelable interface, your ItemDetails class must implement Parcelable. Then you can specify it as
intent.putParcelableArrayListExtra("key", value);
and get it like:
getIntent().getParcelableArrayListExtra("key");
I will not write you Parcelable, because it requires a bit more code. Here is a good example .
Serializable Interface:
If you choose the Serializable interface, I suggest you create a named class for the ItemDetailsWrapper instance that wraps your ArrayList(s)<ItemDetails>
Both elements of the ItemDetailsWrapper and ItemDetails class must implement the Serializable interface. Now you can pass this through Intent as follows:
getIntent().putExtra("key", <serializableClass>); // storing getIntent().getSerializableExtra("key"); // retrieving
Implementation Example:
public class ItemDetailsWrapper implements Serializable { private static final long serialVersionUID = 1L; private ArrayList<ItemDetails> itemDetails; public ItemDetailsWrapper(ArrayList<ItemDetails> items) { this.itemDetails = items; } public ArrayList<ItemDetails> getItemDetails() { return itemDetails; } } public class ItemDetails implements Serializable { private static final long serialVersionUID = 1L;
And how to get through the steps:
ItemDetailsWrapper wrapper = new ItemDetailsWrapper(list); Intent i = new Intent(<context>, <targetActivity>); i.putExtra("obj", wrapper); // i.putExtra("obj", new ItemDetailsWrapper(list)); // retrieving ItemDetailsWrapper wrap = (ItemDetailsWrapper) getIntent().getSerializableExtra("obj"); ArrayList<ItemDetails> list = wrap.getItemDetails();