如果一个片段不再是前景,那么会调用哪个方法?

时间:2015-05-26 18:24:18

标签: android android-fragments fragment-lifecycle

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

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

那么:如果片段不再是前景,那么总会触发哪种方法? 我尝试过:onPauseonStoponHiddenChanged() ....

更新 这是我保存游戏状态的代码,它放在片段中。到目前为止,它被置于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);
        }

    }

1 个答案:

答案 0 :(得分:2)

我将以下图像保存到计算机中,以便快速查看。我认为这是非常自我解释的。如果onDestroyonPause没有删除它,我会尝试onStopfragment lifecyle