2013-04-10 77 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