Статические элементы массива int становятся 0 при доступе из другого фрагмента - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть 2 фрагмента (OCR.java и Manual.java).Оба фрагмента находятся под MainActivity.Во фрагменте Manual.java я инициализировал открытый статический массив 2d int public static int[][] board = new int[9][9].Затем я продолжил изменять значение board из фрагмента в OCR.java.Я запустил Log.i в OCR.java, чтобы проверить значение board, и оно обновилось.

Однако, когда я продолжил извлекать значение board во фрагменте в Manual.java,все элементы в массиве равны 0.

1) Почему это происходит?2) Разве общедоступные статические значения не должны сохранять свои значения даже между классами?3) Есть ли лучший способ сделать то, что я хочу достичь?Что на самом деле можно упростить, просто передав массив 2d int из одного фрагмента в класс в другой фрагмент в другом классе.

Любой ввод приветствуется.Спасибо!

MainActivity.class

открытый класс MainActivity расширяет AppCompatActivity {

public static int board[][] = new int[9][9];
....

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
}

OCR.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_ocr, container, false);

    ...


                        for (int row = 0; row < indiGrids.length; row ++) {
                            for (int col = 0; col < indiGrids[row].length; col ++) {

                                ...

                                    try {
                                        board[row][col] = Integer.parseInt(getText(indiGrids[row][col]));
                                    } catch (NumberFormatException e) {
                                        board[row][col] = 0;
                                        }
                                    }
                                } else {
                                    board[row][col] = 0;
                                }

                            }
                        }

                        Log.wtf("Board", "" + board[0][1]); //returns 4, because i just set it in the above nested for loop.
                    } ...


    return rootView;
}

Manual.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 View rootView = inflater.inflate(R.layout.fragment_manual, container, false);
 Log.wtf("TEST", "" + board[0][1]); // returns 0, instead of 4

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете получить массив, пройдя через Bundle и установив его во фрагмент с помощью метода setArguments .

Для передачи:

bundle.putSerializable("array", board); // Here bundle is Bundle object.

Для извлечения:

iny[][] boardAtOtherSide = (int[][]) getArguments().getSerializable("array"); //Use this inside OCR fragment

Для задания:

OCR ocr = new OCR();//Use this same instance to change fragment
Bundle mBundle = new Bundle();
mBundle.putSerializable("array", board);
ocr.setArguments(mBundle);
...