在静态方法中设置ImageView

时间:2013-04-10 00:14:40

标签: android static imageview

我有一个需要从另一个活动调用的方法,我需要用它来设置一个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);

这是否有一种厚颜无耻的方式?我知道还有其他帖子,但我不太明白如何应用那里给出的建议。

谢谢!

2 个答案:

答案 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();
        }
    }

问候。