0

所以,我目前正在尝试编辑android的api提供的Snake游戏。我试图让它在按下菜单->设置->恢复后恢复游戏。但是,在我按下设置后,它并没有一路恢复,而是退出并从那里恢复。我正在使用 Intents 来恢复程序。

public boolean onOptionsSelected(MenuItem menu){
    switch(menu.getItemId()){
        case R.id.settings:
        Intent prefActivity = new Intent(this,MyPreferences.class);
        startActivityForResult(prefActivity, KEY_RESUME_RESULT);
        return true;
}

public void onActivityResult(int requestCode, int resultCode, Intent data){
    switch(requestCode){
    case KEY_RESUME_RESULT:
        if(resultCode==RESULT_OK){
            if(mSnakeView.getMode() == SnakeView.PAUSE)
                this.mSnakeView.setMode(SnakeView.RUNNING);
        }
    }
}

这是在 MyPreferences.class

public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.snake_preferences);
        resume = (Preference)findPreference(getString(R.string.key_resume));
        onPreferenceTreeClick(this.getPreferenceScreen(),resume);
    }

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferencescreen,Preference preference){
        super.onPreferenceTreeClick(preferencescreen,preference);
        Intent intent = new Intent();
        if(preference == resume){
            setResult(Activity.RESULT_OK,intent);
            finish();
        }
        return true;
    }
4

1 回答 1

0

您明确地调用了在内部恢复游戏的方法onCreate(),这可能就是您启动设置后游戏立即恢复的原因。我建议不要使用该方法,而是根据您的喜好设置一个点击监听器:

public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  addPreferencesFromResource(R.xml.snake_preferences);
  resume = (Preference)findPreference(getString(R.string.key_resume));
  resume.setOnPreferenceClickListener (new Preference.OnPreferenceClickListener()
                                         {
    @Override
    public void onPreferenceClick(Preference preference)
    {
      setResult(Activity.RESULT_OK,intent);
      finish();
    }
  });
}

此外,基于您的代码onOptionsSelected()没有显式暂停游戏(但是考虑到onPause()将被调用的 UI 应该暂停),您可能需要对此进行调查。

于 2013-01-27T21:33:34.977 回答