Android: не может вызывать новую активность из класса, который расширяет поток

Изменение: изменил код, чтобы отразить предлагаемые ответы... все еще думаю, что я чего-то не хватает

Я запускаю игру в классе, который расширяет поток и хочет иметь возможность вызывать класс, который выполняет графику в определенное время. Для этого я пытаюсь использовать намерение открыть класс, но не могу заставить его работать. Вот код:

NewGameThread.java:

import android.content.Context;
public class NewGameThread extends Thread {
private Context context;
public GameView mGameView;
public NewGameThread(GameView gameView, Context context) { mGameView = gameView; this.context = context;
}
}

NewTheGame.java:

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class NewTheGame extends NewGameThread {
private Bitmap mBall;
private float mSmileyBallX = -100;
private float mSmileyBallY = -100;
public NewTheGame(GameView gameView) { super(gameView); //Set up my bitmaps mBall = BitmapFactory.decodeResource (gameView.getContext().getResources(), R.drawable.small_red_ball);
}
protected void updateGame(float secondsElapsed) { if(mSmileyBallX == mSmileyBallY) { //it actually calls another function that I removed for simplicity Intent intent = new Intent(context,Launcher.class); context.startActivity(intent); }
}
2 ответа

вам нужен контекст класса активности, поэтому вам нужен один конструктор в NewGameThread

Context context;
public NewGameThread(Context context)
{ this.context = context;
}

то в вашем коде вы должны использовать этот контекст, например:

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


Контекст должен быть передан из действия. Когда вы создаете объект класса NewGameThread из своей Activity, передайте контекст активности в конструкторе. Используйте этот контекст в вызове намерения.

public class NewGameThread extends Thread { public NewGameThread(Context c){ this.context = c; } protected void getActTwo() { Intent intent = new Intent(this.context,ActivityTwo.class); context.startActivity(intent); }
}

licensed under cc by-sa 3.0 with attribution.