java - 从另一个 fragment 访问时静态 int 数组元素变为 0

标签 java android android-fragments static fragment

我有 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/

相关文章:

java - IntelliJ IDEA 对 Spring Boot 项目的持久化支持

java - 如何为 esri Geometry-api 构建 jar 文件

java - Android:ViewPager仅显示第一个 fragment ,其他页面空白

android - 从图库中获取图像以在 fragment 中的 ImageView 中设置?

android - onRequestPermissionsResult 在 HomeActivity 中调用但不在 Fragment 中调用

java - JMH:以 json 对象的形式返回基准测试结果

java - 如何在 Eclipse Paho 中从 MQTT 读取数据?

java - 开始在 Android 2.3 上编程

android - 翻译后旋转不起作用

android - 如何使用具有不同文本和图像的相同布局