簡體   English   中英

從SurfaceView開始新活動

[英]Starting a new activity from a surfaceview

嘗試從我的類GameView.class開始一個擴展SurfaceView的新活動。 有了這個(在Stackoverflow上找到它):

Context context = GameView.this.getContext();
context.startActivity(new Intent(context, ScoreScreen.class));

我將其放在從單獨的線程調用的方法中。 觸發后,該應用程序將凍結。 我嘗試將其直接放在onTouch事件中(以跳過整個游戲並更快地對其進行測試),並且崩潰的原因包括:

11-27 08:00:00.430: W/dalvikvm(1772): threadid=12: thread exiting with uncaught exception (group=0x41e7b300)
11-27 08:00:00.430: E/AndroidRuntime(1772): FATAL EXCEPTION: Thread-598
11-27 08:00:00.430: E/AndroidRuntime(1772): java.lang.NullPointerException
11-27 08:00:00.430: E/AndroidRuntime(1772):     at com.tricky.puzzlepoker.GameView.onDraw(GameView.java:173)
11-27 08:00:00.430: E/AndroidRuntime(1772):     at com.tricky.puzzlepoker.MainThread.run(MainThread.java:38)
11-27 08:00:02.505: I/Process(1772): Sending signal. PID: 1772 SIG: 9

我不知道該怎么辦,需要幫助!

SurfaceView類從View擴展,並且沒有onCreate()方法。 但是構造函數需要一個上下文,在創建GameView對象時必須忽略該上下文。 因此,我建議您將上下文存儲到全局變量中,以供以后在此類中使用:

   private class GameView extends SurfaceView {
     private Context mContext;
     ...
     public GameView(Context context, AttributeSet attrs, int defStyle){
       super(context, attrs, defStyle);
       this.mContext = context;
       ...
     }
     ...
    }

否則,您可以使用以下方法在GameView類中的其他任何地方獲取上下文:

    mContext = getContext();

在這種情況下,您可以稍后開始活動:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM