0

我在我的Activity類中有一個非靜態的包私有方法,我想在SurfaceView中調用它,例如:surfaceChanged()或surfaceDestroyed()。如何在SurfaceView的Activity中調用包 - 私有方法?

public class MyActivity extends Activity { 

Camera mCamera = Camera.open(); 
Camera.Parameters parameters = mCamera.getParameters(); 
boolean hasFlash = false; 
... 
    void destroyCamera() { 
    flashOff(); 
    mCamera.stopPreview(); 
    mCamera.release(); 
    mCamera = null; 
} 

void updateCamera() { 
    mCamera.setParameters(parameters); 
    mCamera.startPreview(); 
} 
... 
class CameraView extends SurfaceView implements SurfaceHolder.Callback { 
... 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    destroyCamera(); 
} 
... 

有沒有更好的方法來做到這一點?我還在同一個活動中使用toggleFlash()方法,因此我可以通過按鍵偵聽器從活動內切換閃光燈。

+0

這是非常不清楚你在問什麼。你說'SurfaceView',但是你的代碼中沒有提到它。請更具體一些。 – Phil 2013-02-28 23:05:19

+0

添加了我試圖調用活動中的方法的SurfaceView類。可以在重載的構造函數中將該活動作爲參數傳遞嗎?我問的是從SurfaceView類的Activity類中調用方法的最佳方式。對困惑感到抱歉 :) – user2081718 2013-02-28 23:18:30

回答

0

爲了回答您的評論 - 是的,你可以通過Activity到構造來代替context的:

SurfaceView view = new SurfaceView(this); 

然後,只要你確信contextActivity,你可以將它轉換到Activity調用的方法:

//call inside the view 
((MyActivity) getContext()).methodToCall(); 

其他選項包括您Activity提供靜態參考,和進入你的靜態的活動,通過弱引用,蘇CH爲:

public static WeakReference<MyActitivity> getActivity(){ 
    return new WeakReference<MyActivity>(self);// self is a static instance of MyActivity 
} 

您可以通過在onCreate或默認的構造函數分配給它得到的靜態引用您的Activity

private static MyActivity self; 

public MyActivity() 
{ 
    super(); 
    self = this; 
} 
相關問題