How to pass a double array(boolean[][]) between activities?

前端 未结 3 1930
难免孤独
难免孤独 2021-01-25 00:34

I can\'t see to get a double boolean array to pass through to the another activity. I use putExtra and when I retrieve it and cast it to boolean[][], it states that

3条回答
  •  滥情空心
    2021-01-25 01:30

    This is old, but helped me a lot, so I wanted to share my findings. I used Parcelabler to make my Object Class Parcelable(Because everything I read, was written in martian to me), then I used @John Ericksen answer to implement it in my Object Class and some methods to make my life easier flattenMultiDimensionalArray and restoreMultiDimensionalArray and the final result.

    For a 2 Dimensional Array

    MultiDimensionalArray .java

    public class MultiDimensionalArray implements Parcelable {
    
    private int[][] multiDimensionalArray;
    //Any other Variables, Objects
    
    public MultiDimensionalArray() {
    
    }
    
    public MultiDimensionalArray(int[][] multiDimensionalArray) {
    
        this.multiDimensionalArray = multiDimensionalArray;
        //Any other Variables, Objects
    }
    
    public int[][] getMultiDimensionalArray() {
    
        return multiDimensionalArray;
    }
    
    public void setMultiDimensionalArray(int[][] multiDimensionalArray) {
    
        this.multiDimensionalArray = multiDimensionalArray;
    }
    
    protected MultiDimensionalArray(Parcel in) {
    
        int rows = in.readInt();
        int columns = in.readInt();
        int[] transitionalArray = in.createIntArray();
        multiDimensionalArray = restoreMultiDimensionalArray(transitionalArray, rows, columns);
        //Any other Variables, Objects
    
    }
    
    @Override
    public int describeContents() {
    
        return 0;
    }
    
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    
        int rows = multiDimensionalArray.length;
        int columns = multiDimensionalArray[rows - 1].length;
        int[] transitionalArray = flattenMultiDimensionalArray(multiDimensionalArray);
        dest.writeInt(rows);
        dest.writeInt(columns);
        dest.writeIntArray(transitionalArray);
        //Any other Variables, Objects
    
    }
    public static final Creator CREATOR = new Creator() {
    
        @Override
        public MultiDimensionalArray createFromParcel(Parcel in) {
    
            return new MultiDimensionalArray(in);
        }
    
        @Override
        public MultiDimensionalArray[] newArray(int size) {
    
            return new MultiDimensionalArray[size];
        }
    };
    private int[] flattenMultiDimensionalArray(int[][] sourceCard) {
    
        int k = 0;
        int[] targetCard = new int[sourceCard.length * sourceCard[sourceCard.length - 1].length];
        for (int[] aSourceCard : sourceCard) {
            for (int anASourceCard : aSourceCard) {
                targetCard[k] = anASourceCard;
                k++;
            }
        }
        return targetCard;
    }
    private int[][] restoreMultiDimensionalArray(int[] sourceCard, int rows, int columns) {
    
        int k = 0;
        int[][] multiDimensionalArray = new int[rows][columns];
        for (int i = 0; i < multiDimensionalArray.length; i++) {
            for (int j = 0; j < multiDimensionalArray[multiDimensionalArray.length - 1].length; j++) {
                multiDimensionalArray[i][j] = sourceCard[k];
                k++;
            }
        }
        return multiDimensionalArray;
    }
    

    }

提交回复
热议问题