Passing an arraylist of arraylists

后端 未结 3 1324
[愿得一人]
[愿得一人] 2021-01-28 22:37

I know it\'s a commonly asked question and I looked at the solutions online, but I am having a difficulty implementing this on my own.

I have a class which contains thr

3条回答
  •  囚心锁ツ
    2021-01-28 22:54

    I think the best thing to do here would be to create a new class that implements Parcelable and pass instances of this new class between activities.

    public class ParcelableListOfLists implements Parcelable {
    
        private ArrayList> listOfLists;
    
        public ParcelableListOfLists(ArrayList> listOfLists) {
            this.listOfLists = listOfLists;
        }
    
        public ArrayList> getListOfLists() {
            return listOfLists;
        }
    
        // parcelable implementation here
    }
    

    Once you have this class, you can be in full control of how your data is parceled, and that lets you do some things that you won't be able to do with the Android built-in offerings.

    Here's one way you could parcel a list of lists:

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (listOfLists != null) {
            dest.writeInt(listOfLists.size());
    
            for (ArrayList list : listOfLists) {
                dest.writeTypedList(list);
            }
        } else {
            dest.writeInt(-1);
        }
    }
    

    And on the other side, you can recreate the list of lists like this:

    public ParcelableListOfLists(Parcel in) {
        int size = in.readInt();
    
        if (size != -1) {
            this.listOfLists = new ArrayList<>(size);
    
            for (int i = 0; i < size; ++i) {
                ArrayList list = in.createTypedArrayList(imageHolder.CREATOR);
                listOfLists.add(list);
            }
        } else {
            this.listOfLists = null;
        }
    }
    

    With all of this together, you can pass your list of lists between activities like this:

    Intent nextActivity = new Intent(loadImages.this, storiesScreen.class);
    nextActivity.putExtra("images", new ParcelableListOfLists(images));
    startActivity(nextActivity);
    

    and retrieve them in the next activity like this:

    ParcelableListOfLists plol = getIntent().getParcelableExtra("images");
    ArrayList> images = plol.getListOfLists();
    

提交回复
热议问题