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.