Android 在静态方法中设置ImageView

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

我有一个需要从另一个活动调用的方法,我需要使用它在它自己的活动中设置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进行静态引用,因为它不是静态方法。在保存照片后,将在摄影机活动中调用此方法,我希望传入文件名(文件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,但这样做似乎不起作用,因为我无法恢复文件名。想法?它是一个常量,包含任何字符串值,您应该使用它作为额外的键来设置和获取您想要的文件名