Android 在静态方法中设置ImageView
我有一个需要从另一个活动调用的方法,我需要使用它在它自己的活动中设置ImageView。我在MainActivity中有此方法:Android 在静态方法中设置ImageView,android,static,imageview,Android,Static,Imageview,我有一个需要从另一个活动调用的方法,我需要使用它在它自己的活动中设置ImageView。我在MainActivity中有此方法: public static void setImageView(String fileName){ Log.i(TAG, fileName); imageView = (ImageView) findViewById(R.id.imageView); bmp = BitmapFactory.decodeFile(file
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进行静态引用,因为它不是静态方法。在保存照片后,将在摄影机活动中调用此方法,我希望传入文件名(文件URI)并设置imageView,以便当摄影机活动完成且用户返回到Main活动时,imageView已设置。因此,在《CameraView》中,我试图称之为:
...code...
mCamera.takePicture(null, null, callback);
MainActivity.setImageView(fileName);
有没有一种厚颜无耻的方法?我知道还有其他关于这方面的帖子,但我不太清楚如何将这些建议应用到我的情况中
谢谢 有几件事
1) 既然您一次只能显示一个活动,为什么不在活动中使用ImageView
启动startActivityForResult
,并在相机活动中覆盖onActivityResult
2) 我不确定您的应用程序,但如果您通过以下方式实现拍照,可能会更容易:
3) 您可以公开对主活动的静态引用,在主活动的onCreate
方法中,执行类似于staticRef=this的操作
在您的相机活动中,只需通过MainActivity.staticRef…
访问它(我不推荐这种方法)
4) 您可以在主活动中注册一个广播接收器,该接收器引用您的主活动或图像视图,并在您的相机活动中向其发送一个广播,您可以设置图像视图也许您应该使用startractivityforresult()方法启动CameraActivity,拍摄完照片后,将文件名作为一个额外文件放入一个Intent中,并将其设置为result。然后,在MainActivity中,您可以从onActivityResult()的Intent参数获取文件名 比如:
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();
}
}
问候。谢谢您的详细回复。StartActicBityForresult似乎是最好的方法,它不是我以前使用过的方法,所以我会确保我读了一点,以完全理解它的实现。此外,我的相机是一个OpenCV活动,它是针对我的特定需求高度定制的,我在第2点中看到了您链接的变化,但我始终认为它们仅限于使用本机相机-是吗?是的,您仅限于使用本机相机,这就是为什么我问您的意图是什么。对于
startActivityForResult(intent,resultCode)
,处理完图像后您将要做的事情正是eltabo建议的,听起来很完美,感谢您的代码示例。我会读一点,并尝试实现它。当我知道它是否有效时,我会回来报告的!我在使用RETURN\u FILE\u参数时遇到了一点问题,它说它无法将其解析为变量,并建议声明它并将其设置为null,但这样做似乎不起作用,因为我无法恢复文件名。想法?它是一个常量,包含任何字符串值,您应该使用它作为额外的键来设置和获取您想要的文件名