请原谅我的简单问题,我是初学java和android开发人员。当调用surfaceChanged时,如何在setCameraDisplayOrientation中获取Activity的实例?
public class MyActivity extends Activity
{
private Camera mCamera;
private CameraPreview mPreview;
public final int cameraId = 0;
public Activity activity = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
activity = this;
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
public void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
}
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
...
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
...
setCameraDisplayOrientation(activity, cameraId, mCamera);
....
}
}
}
答案 0 :(得分:27)
这是一种使用静态变量避免内存泄漏的方法:对将在onCreate(Bundle)方法中设置的Activity实例进行静态弱引用。
在您的二级课程中写下如下内容:
public Class SecondClass {
private static WeakReference<Activity> mActivityRef;
public static void updateActivity(Activity activity) {
mActivityRef = new WeakReference<Activity>(activity);
}
然后在Activity类的onCreate(Bundle)方法中:
@Override
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SecondClass.updateActivity(this);
...
}
以这种方式使用活动实例:
mActivityRef.get()
答案 1 :(得分:8)
Activity a = (Activity) getContext();
只要您将当前活动作为构造函数中的上下文传递,就像您现在一样。
答案 2 :(得分:4)
我只是在主要活动中设置了一个变量,例如...... public static Activity activity = this;
然后我可以使用以下任意位置引用它:MainActivity.activity
。
你也可以在onCreate()方法中设置它,只需在主活动类的顶部设置变量,如public static Activity activity;
,然后在onCreate()方法中添加activity = this;
这适用于任何扩展Activity的类,例如public class MainActivity extends Activity
但是你可以从任何类调用该变量,即使它们没有扩展Activity。
希望这有帮助。
答案 3 :(得分:0)
方法this.getParent()
有效。