我有 2 个 fragment (OCR.java 和 Manual.java)。这两个 fragment 都位于 MainActivity 下。在 Manual.java 的 fragment 中,我初始化了一个 public static 2d int 数组 public static int[][] board = new int[9][9]
。然后,我继续更改 OCR.java 中 fragment 中的 board
值。我在 OCR.java 中运行了 Log.i
来检查 board
的值并且它已更新。
但是,当我继续检索Manual.java中的 fragment 中board
的值时,数组中的元素都是0。
1) 为什么会发生这种情况? 2)公共(public)静态值不应该在跨类中保留其值吗? 3)有没有更好的方法来实现我想要实现的目标?实际上可以简化为将 2d int 数组从一个类中的一个 fragment 传递到另一个类中的另一个 fragment 。
欢迎任何意见。谢谢!
MainActivity.class
公共(public)类 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;
}
手册.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
最佳答案
您可以通过Bundle检索数组,并使用setArguments方法将其设置到 fragment 。
通过:
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);
关于java - 从另一个 fragment 访问时静态 int 数组元素变为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58008720/