我有一个需要从另一个活动调用的方法,我需要用它来设置一个ImageView自己的活动。我在MainActivity中有这个方法:
public static void setImageView(String fileName){
Log.i(TAG, fileName);
imageView = (ImageView) findViewById(R.id.imageView);
bmp = BitmapFactory.decodeFile(fileName);
imageView.setBackgroundResource(0);
imageView.setImageBitmap(bmp);
}
但我无法对findViewById进行静态引用,因为它不是静态方法。保存照片后,在Camera Activity中调用此方法,我想传入fileName(文件URI)并设置imageView,以便当Camera Activity完成并且用户返回MainActivity时,ImageView已经设置。因此,在CameraView中我试图称之为:
...code...
mCamera.takePicture(null, null, callback);
MainActivity.setImageView(fileName);
这是否有一种厚颜无耻的方式?我知道还有其他帖子,但我不太明白如何应用那里给出的建议。
谢谢!
答案 0 :(得分:1)
一些事情。
1)由于您一次只能显示一项活动,为什么不在startActivityForResult
活动中使用ImageView
开头,并在相机活动中覆盖onActivityResult
?
2)我不确定你的应用程序,但如果按照以下方式实现拍照可能会更容易:http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/。
3)您可以在主要活动的onCreate
方法中公开对主要活动的静态引用,执行类似staticRef = this;
的操作,并在相机活动中通过MainActivity.staticRef...
访问它(我不推荐这种方法)
4)您可以在主活动中注册广播接收器,该接收器具有对您的主要活动或图像视图的引用,以及您向其发送广播的相机活动,您可以设置图像视图
答案 1 :(得分:1)
也许您应该使用startActivityForResult()方法启动CameraActivity,并在拍摄照片后将fileName作为Extra放入Intent并将其设置为结果。然后在您的MainActivity中,您可以从onActivityResult()的Intent arg中获取fileName。
类似的东西:
public class MainActivity extends Activity{
public void aMethod(){
...
Intent i = new Intent(this, CameraActivity.class);
startActivityForResult(i, REQUEST_CODE);
...
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
Bundle b = data.getExtras();
String fileName = b.getString(RETURN_FILE_PARAMETER);
doSomething(fileName);
}
}
}
...
public class CameraActivity extends Activity{
private void returnFileFinishActivity(String fileName) {
Intent retIntent = new Intent();
retIntent.putExtra(RETURN_FILE_PARAMETER, fileName);
setResult(RESULT_OK, retIntent);
finish();
}
}
问候。