0

我有一个需要从另一个活动调用的方法,我需要使用它在它自己的活动中设置一个 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 进行静态引用,因为它不是静态方法。保存照片后,在相机 Activity 中调用此方法,我想传入文件名(文件 URI)并设置 imageView,以便当相机 Activity 完成并且用户返回 MainActivity 时,ImageView 已经设置. 因此,在 CameraView 我试图这样称呼:

...code...
mCamera.takePicture(null, null, callback);
MainActivity.setImageView(fileName);

有没有办法解决这个问题?我知道还有其他关于此的帖子,但我无法弄清楚如何将那里给出的建议应用于我的情况。

谢谢!

4

2 回答 2

1

一些东西。

1)既然你一次只应该显示一个活动,为什么不从活动开始,startActivityForResult并在你的相机活动中 ImageView覆盖?onActivityResult

2)我不确定您的应用程序,但如果您按照以下步骤实现拍照可能会更容易:http: //mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-相机/ .

3)您可以在您的主要活动的onCreate方法中公开对您的主要活动的静态引用,执行类似的操作staticRef = this;,并在您的相机活动中简单地通过MainActivity.staticRef...(我不推荐这种方法)访问它

4)您可以在您的主要活动中注册一个广播接收器,该接收器引用您的主要活动或图像视图,并在您的相机活动中向其发送广播,您可以设置图像视图

于 2013-04-10T00:31:48.253 回答
1

也许您应该使用 startActivityForResult() 方法启动您的 CameraActivity,然后在拍摄照片后将 fileName 作为 Extra 放入 Intent 并将其设置为结果。然后在您的 MainActivity 中,您可以从 onActivityResult() 的 Intent arg 中获取文件名。

就像是:

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

问候。

于 2013-04-10T00:32:56.410 回答