0

これまでのところ、2つのアクティビティで構成されるアプリがあります。

  • メインメニューアクティビティ。

  • ゲームアクティビティ

メインメニューアクティビティには、次のコードでゲームアクティビティを開始するボタンが含まれています。

public void onClick(View clickedButton)
    {
        switch(clickedButton.getId())
        {
        case R.id.buttonPlay:
            Intent i = new Intent("apple.banana.BouncingBallActivity");
            startActivity(i);
            break;
    }

ユーザーがゲームアクティビティを終了したら、戻るボタンを押します。これにより、最初にonPause()メソッドが呼び出され、ゲームのアニメーションスレッドが一時停止します。次に、アクティビティでfinish()を呼び出すonStop()を呼び出します。ユーザーはメインメニューアクティビティに戻ります。コードの概要は次のとおりです。

public class BouncingBallActivity extends Activity{


    private BouncingBallView bouncingBallView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        bouncingBallView = new BouncingBallView(this);
        bouncingBallView.resume();
        setContentView(bouncingBallView);
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        bouncingBallView.pause();
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        bouncingBallView.resume();
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        this.finish();
    }
}

問題は、Eclipseからアプリケーションを起動した場合にのみこれが機能することです。アプリのアイコンをクリックすると、ゲームはゲームアクティビティから始まります。メインメニューアクティビティは表示されません。

なぜこれが起こるのかはっきりしていません。マニフェストと関係があるかもしれません。以下の関連部分を貼り付けました。

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".BouncingBallActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="apple.banana.BouncingBallActivity" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainMenu"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

私はこれでどんな助けにも本当に感謝します。ありがとう。

4

2 に答える 2

1

の呼び出しはメソッドfinish()に属していません。onStop()ユーザーが押し返したときにゲームを終了する場合は、に配置しますonPause()。アプリがその後の起動時に(Androidランチャーインターフェイスを介して)ゲームアクティビティから取得する理由は、アプリがそこに残されることはないためです。

ユーザーが戻るキーを押したときにのみゲームを終了し、他の一時停止からは終了したくない場合は、着信キーをキャッチする必要がありfinish()、キーが戻るかどうかを確認する必要があります。

于 2012-03-29T11:35:58.240 に答える
0

あなたがあなたの戻るボタンを押すとき、あなたはこれをすることができます。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK))
        {       
            this.finish();
        }
        return super.onKeyDown(keyCode, event);
    }

また

@Override
public void onBackPressed() {
    this.finish();
}
于 2012-03-29T11:39:37.843 に答える