0

新しいインテントが2番目の部分(onTouchEvent内)では機能するのに、最初の部分(update())では機能しないのはなぜですか。これをupdate()メソッド(必要な場所)に入れると、何も実行されません。ログエントリを入れて、実際にif / thenを通過するかどうかを確認し、通過します。

アップデート:

さて、WEIRDを取得します。ここで3つすべての答えを試しましたが、それでもうまくいきませんでした。電話の画面が消えるまで(usb経由で接続されたAndroidを使用)。もう一度オンにすると、新しいアクティビティが開始されたことがわかります。

アップデート2:エミュレータで試してみましたが、正常に動作します。そんなことがあるものか?

class GameView extends SurfaceView implements SurfaceHolder.Callback {
    private MainThread _thread;

public GameView(Context context) {
        super(context);
        getHolder().addCallback(this);

        _thread = new MainThread(getHolder(), this);
        setFocusable(true);
}

public void update() {


        if (deckPos >= 25) {
            Log.v("DEBUG", "finished");

            // --- DOESNT WORKS HERE ---
            Context context = getContext();
            Intent intent = new Intent(context, ScoreScreen.class);
            context.startActivity(intent);
            // ------------------

        }


    }


public boolean onTouchEvent(MotionEvent event) {
        synchronized (_thread.getSurfaceHolder()) {

            if (event.getAction() == MotionEvent.ACTION_DOWN) {


            // --- WORKS HERE ---
            Context context = getContext();
            Intent intent = new Intent(context, ScoreScreen.class);
            context.startActivity(intent);
            // ------------------

                touchX = (int) event.getX();
                touchY = (int) event.getY();
                touching = true;

                if (cardDispencer.contains(touchX, touchY)) {
                    holdingCard = true;
                }

                int t = returnTouchingCardGrid(touchX, touchY);

                if (t < gridIDs.length && gridIDs[t] == 0) {
                    gridIDs[t] = deck[deckPos];
                    deckPos++;
                    updateScore();
                }

            }

            if (event.getAction() == MotionEvent.ACTION_MOVE) {
                touchX = (int) event.getX();
                touchY = (int) event.getY();
            }

            if (event.getAction() == MotionEvent.ACTION_UP) {

                int t = returnTouchingCardGrid((int) event.getX(), (int) event.getY());

                if (t < gridIDs.length && gridIDs[t] == 0 && holdingCard) {
                    gridIDs[t] = deck[deckPos];
                    deckPos++;
                    updateScore();
                }

                touching = false;
                holdingCard = false;

            }

            return true;
        }
    }
}
4

2 に答える 2

0

変化する:

Intent intent = new Intent(context, ScoreScreen.class);
context.startActivity(intent);

に:

Intent intent = new Intent(your_current_activity.this, ScoreScreen.class)
startActivity(intent);
于 2012-11-28T04:07:07.460 に答える
0

コードを次のように変更します

public void update() {

    if (deckPos >= 25) {
        Log.v("DEBUG", "finished");

        Intent intent = new Intent(getApplicationContext(), ScoreScreen.class);
        startActivity(intent);
    }
}

コンテキスト変数ではなく、 Intent でアクティビティを開始します。インテントを使用して別のアクティビティを呼び出す方法をさらに明確にする必要がある場合は、ここで素晴らしいチュートリアルを見つけることができます

于 2012-11-28T03:49:43.967 に答える