2016-04-09 58 views
1

我正在學習如何在Android Studio中使用Java設置Surface View。這是我的代碼:無法解析方法(Android Studio(java)中的初學者問題)

package com.example.benjamin.labb3; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 

public class SurfaceView extends Activity { 

    private OurView v; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(v); 
     v = new OurView(this); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     v.pause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     v.resume(); 
    } 

    public class OurView extends SurfaceView implements Runnable { 

     Thread t = null; 
     SurfaceHolder holder; 
     boolean isOk = false; 

     public OurView(Context context){ 
      super(context); 
      holder = getHolder(); 
     } 

     public void run(){ 
      if(isOk){ 

      } 
     } 

     public void pause(){ 
      isOk = false; 
      while (true){ 
       try { 
        t.join(); 
        t = null; 
        break; 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     public void resume(){ 
      isOk = true; 
      t = new Thread(this); 
      t.start(); 
     } 
    } 
} 

setContentView(v); 

我收到錯誤消息:

「無法解析方法 的setContentView(com.example.ben3.pl2.SurfaceView。 OurView)「

而且在

public OurView(Context context){ 
    super(context); 
    holder = getHolder(); 
} 

我收到錯誤:

「無法解析法超(android.content.Context)」

「無法解析法getHolder()」

燦任何人都幫助我?該教程是從2011年開始的,所以它可能與他們擁有舊版本的AS有關,或者我錯過了某些東西。

+0

put v = new OurView(this); setContentView(v)之前; – uguboz

回答

2

夫婦的事情,你應該在這裏解決。將您的班級和檔案重命名爲MyActivity或至少是SurfaceView以外的內容以避免混淆。你想使用android.view.SurfaceViewSurfaceView不是你自己的,所以你應該導入那個。

import android.view.SurfaceView; 

此外,還必須在setContentView()使用之前創建的OurView一個新的實例。

這是您的代碼與應用的更改。

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class MyActivity extends Activity { 

    private OurView v; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     v = new OurView(this); 
     setContentView(v); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     v.pause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     v.resume(); 
    } 

    public class OurView extends SurfaceView implements Runnable { 

     Thread t = null; 
     SurfaceHolder holder; 
     boolean isOk = false; 

     public OurView(Context context){ 
      super(context); 
      holder = getHolder(); 
     } 

     public void run(){ 
      if(isOk){ 

      } 
     } 

     public void pause(){ 
      isOk = false; 
      while (true){ 
       try { 
        t.join(); 
        t = null; 
        break; 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     public void resume(){ 
      isOk = true; 
      t = new Thread(this); 
      t.start(); 
     } 
    } 
} 
1

只是嘗試的setContentView方法 之前實例化這樣

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
v = new OurView(this); 
setContentView(v); 
} 

你的觀點讓我最新