0

そこで、AndroidのAPIが提供するSnakeゲームを編集しようとしています。メニュー - >設定 - >再開を押した後にゲームを再開するようにしようとしています。ただし、すべて再開する代わりに、設定を押した後、終了してそこから再開します。プログラムを再開するためにインテントを使用しています。

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 に答える