【问题标题】:Why is onSaveInstanceState() not called after pressing "back" button?为什么按“返回”按钮后不调用 onSaveInstanceState()?
【发布时间】:2019-11-16 19:08:31
【问题描述】:

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

我一直在搜索并尝试所有相关答案(包括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 是错误的,请纠正我。

如前所述,我尝试在从 Score 到 Game/Bingo 的来回移动中修复宾果号码,但使用这些代码未能实现。我不知道是否还有更多与该问题相关的代码,因为我还是新手,但如果你们能提供帮助,这将非常有帮助。谢谢!

【问题讨论】:

    标签: android instance savestate


    【解决方案1】:

    我假设 Bingo 和 Score 都是活动。

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

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

    如果 Bingo 和 Score 应该共享共同的状态,那么也许它们不应该是单独的活动。相反,使用一个活动,两个片段(Bingo 和 Score),它们之间共享一个 ViewModel

    【讨论】:

    • 从不知道片段。会试着去看看。任何有关它的链接都会非常有帮助。非常感谢!
    • @IrfanMokhtar:在 Android 应用程序开发中使用 Fragments 已有八年了。无论您使用什么书来学习 Android 应用程序开发,都可能太旧了。您可以在文档中了解有关 Fragment 的更多信息:developer.android.com/guide/components/fragments
    • 我想问一下,为什么我的 Bingo 活动实例会被永久销毁?我对此有点不知所措。这与我的 Bingo 和 Score 都是活动有关吗?在什么情况下我的 Activity 的实例可以处于保存状态?
    • @IrfanMokhtar:“为什么我的 Bingo 活动实例被永久销毁?” -- 这就是 BACK 所做的:它完成了活动。 “在什么情况下我的activity的实例可以处于保存状态?” - 您不太可能针对您的情况使用已保存的实例状态。我建议将这个项目搁置一段时间,并从最新的书籍或课程中学习 Android 应用程序开发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多