新しいインテントが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;
}
}
}