0

У меня есть нестатический, приватный по частям метод в классе Activity, который я бы назвал внутри SurfaceView, например: surfaceChanged() или surfaceDestroyed().Как я могу вызвать метод private-private в Activity из SurfaceView?

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

+0

Добавлен класс SurfaceView, с которого я пытаюсь вызвать метод в активности. Может ли передать действие в качестве параметра в перегруженном конструкторе? То, что я прошу, - это лучший способ вызова метода в классе Activity из класса SurfaceView. Извините за беспорядок :) – user2081718

ответ

0

Чтобы ответить на ваш комментарий - да, вы можете передать Activity в конструктор вместо context:

SurfaceView view = new SurfaceView(this); 

Затем, если вы уверены, что context является Activity, вы можете бросить его к Activity для вызова метода:

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

Другие варианты включают предоставление статическую ссылку на ваш Activity, или получить доступ к вашей деятельности статически, с помощью слабой ссылки, су ч, как:

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

Вы можете получить статическую ссылку на ваш Activity, назначив его в onCreate или конструктор по умолчанию:

private static MyActivity self; 

public MyActivity() 
{ 
    super(); 
    self = this; 
}