2013-04-10 64 views
0

设置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,因为它不是一个静态方法。这个方法在相片活动中被保存之后被调用,我想传入fileName(文件URI)并设置imageView,当Camera Activity完成并且用户返回MainActivity时,ImageView已经设置。因此,在CameraView中,我试图称之为:

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

有没有一种厚颜无耻的方式来解决这个问题?我知道还有其他的帖子,但我不能完全弄清楚如何将这些建议应用于我的情况。

谢谢!

回答

1

也许你应该发动你的CameraActivity使用startActivityForResult()方法,并在拍摄照片后将fileName作为Extra放入In中帐篷,并将其作为结果。然后在您的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(); 
     } 
    } 

问候。

+0

听起来很完美,谢谢你的代码示例。我会稍微阅读并尝试实施它。我会回来报告,当我知道它是否有效! – David 2013-04-10 00:41:49

+0

我有RETURN_FILE_PARAMETER了一点小麻烦,它说,它无法解析它作为一个变量,并建议宣布它并将其设置为null,但这样做似乎没有工作,因为我没有得到文件名后面。思考? – David 2013-04-10 01:27:52

+0

这是你应该使用作为额外的键来设置和获取文件名在你的意图的任何字符串值恒定 – eltabo 2013-04-10 06:49:03

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)你可以注册你的主要业务的广播接收机有你的主要活动或图像视图,并在你的相机活动涉及您发送一个广播给它,你可以设置图像视图

+0

感谢您的非常详细的答复。 startActibityForResult看起来是最好的方法,它不是我以前用过的东西,所以我会确保我读一点来完全理解它的实现。 另外,我的相机是高度定制我的特定需求的OpenCV的活动,我看到您的链接变化点2,但我一直以为他们只限于使用本机摄像头 - 是这样吗? – David 2013-04-10 00:39:31

+0

是的,您仅限于使用本机相机,这就是为什么我问你的目的是什么。对于'''startActivityForResult(intent,resultCode)'''当你完成图像时你会做什么,这正是eltabo推荐的 – vincentjames501 2013-04-10 00:58:14