为什么按下“后退”按钮后未调用onSaveInstanceState()?

时间:2019-07-06 14:40:23

标签: android instance savestate

我正在创建一个保龄球得分应用程序,其中将包括一个宾果游戏。为简化起见,在Score类中,有一个按钮将启动一个新活动(Bingo类)。在游戏中,请确保需要从Score到Bingo来回移动。我现在正面临的问题是,当我尝试从Bingo“返回”到Score时,没有调用onSaveInstanceState。因此,每次我单击启动“宾果游戏”的“游戏”按钮时,应该固定的宾果游戏号码都会改变。

我一直在搜索并尝试所有相关的答案(包括https://developer.android.com/guide/components/activities/activity-lifecycle),但对我没有任何帮助。我还尝试在任何活动上临时删除screenOrientation,因为我看到屏幕旋转将创建一个新实例。这是与该问题有关的代码。

Score.java(移动Bingo的按钮)

 @Override
    public void onClick(View view) {

        String button_text;
        button_text = ((Button) view).getText().toString();

        if (button_text.equals("GAME")) {
            Intent gamePage = new Intent(this, Game.class);
            startActivity(gamePage);
        }

Game.java(bingo1和bingo2是整数数组)

...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);

        ...

        if (savedInstanceState != null){
            bingo1 = savedInstanceState.getIntArray("bingo1");
            bingo2 = savedInstanceState.getIntArray("bingo2");
        }else {

            ...


     }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {

        savedInstanceState.putIntArray("bingo1", bingo1);
        savedInstanceState.putIntArray("bingo2", bingo2);

        super.onSaveInstanceState(savedInstanceState);
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {

        super.onRestoreInstanceState(savedInstanceState);


        bingo1 = savedInstanceState.getIntArray("array1");
        bingo2 = savedInstanceState.getIntArray("array2");
    }

如果同时调用onCreate()和onRestoreInstanceState是错误的,请纠正我。

如前所述,我试图在从得分到游戏/宾果游戏的来回移动中修复宾果游戏号码,但我无法使用这些代码来实现。我还不熟悉,所以我不知道是否有更多与此问题相关的代码,但是如果你们可以提供帮助,它将非常有帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我假设Bingo和Score都是活动。

  

当我试图从Bingo“返回”到Score时,我现在面临的问题是onSaveInstanceState没有被调用

不应该再调用它。您的Bingo活动实例将被永久销毁。没有更多实例状态可保存。

如果Bingo和Score应该具有共同的状态,那么也许它们不应该是分开的活动。取而代之的是,使用一个活动,两个片段(宾果和乐谱),它们之间共享ViewModel