1

我用导航抽屉和内容片段实现了一个活动。内容片段被多次替换。但是在某些时候,我必须提供一个跳转到具有特定状态的特定片段。我设法保存了所有必需的变量。它经常工作,但并不总是跳回。

如果特定片段调用他们的onPause()方法,我会在操作栏中显示一个按钮。但是,由于片段的生命周期与活动相关联并且活动没有变化,因此有时按钮不会出现,因为onPause()没有被调用。

所以:如果一个片段不再在前台,哪个方法总是被触发?我试过:onPause,, onStop....onHiddenChanged()

更新: 这是我保存游戏状态的代码,它放在片段中。直到现在它被放在onStop()方法中。gamelogic 变量是一个具有许多值和集合的对象。我将其保存到共享首选项中。

@Override
    public void onStop() {
        super.onStop();

        if(!isGameDone){    
            SharedPfref sharedPfref = new SharedPfref();
            sharedPfref.saveGameLogicInSharedPref(this.gameLogic);
        } else {
            SharedPfref sharedPfref = new SharedPfref();
            sharedPfref.deleteGameLogicFromSharedPref();
        }

    }

在我的主要活动中,我决定是否在操作栏上显示一个图标。通过按下此按钮,我使用已保存的游戏状态保持器重新启动片段。

@Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        SharedPfref sharedPfref = new SharedPfref();
        if(sharedPfref.isGameLogicSavedInSharedPref()){
            menu.findItem(R.id.action_resume_game).setVisible(true);
        } else {
            menu.findItem(R.id.action_resume_game).setVisible(false);
        }


        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {

            return true;
        }

        switch(item.getItemId()) {
            case R.id.action_resume_game:

                SharedPfref sharedPfref = new SharedPfref();
                GameLogic gameLogic = sharedPfref.loadGameLogicFromSharedPref();

                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, GameFragment.newInstance(gameLogic))
                        .commit();


                return true;
            default:
                return super.onOptionsItemSelected(item);
        }

    }
4

1 回答 1

2

我将以下图像保存到我的计算机中,以便我可以快速参考它。我认为这很不言自明。我会尝试onDestroy如果onPause并且onStop没有切割它。片段生命周期

于 2015-05-26T18:34:20.117 回答