2013-04-10 3 views
0

다른 액티비티에서 호출해야하는 메서드가 있습니다.이 메서드를 사용하여 이미지 뷰를 자체 액티비티에 설정해야합니다. 나는 MainActivity에서이 방법이 있습니다ImageView를 정적 메서드로 설정

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를 설정하여 카메라 활동이 끝나고 사용자가 MainActivity로 돌아 오면 ImageView가 이미 설정되어 있습니다. . 따라서 CameraView에서 다음을 호출하려고합니다 :

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

건방진 방법이 있습니까? 나는 이것에 다른 포스트가다는 것을 알고있다 그러나 나는 나의 상황에 주어진 통보를 적용하는 방법을 확실히 운동 할 수 없다.

감사합니다.

답변

1

startActivityForResult() 메서드를 사용하여 CameraActivity를 호출 한 다음 사진을 찍은 다음 fileName을 Extra로 In에 넣습니다. 텐트를 가져다가 결과로 정하십시오. 그런 다음 MainActivity에서 onActivityResult()의 Intent 인수에서 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

+0

RETURN_FILE_PARAMETER에 약간의 문제가 있습니다. 변수로 해결할 수 없다고 말하면서 선언하고 null로 설정하는 것이 좋지만 fileName을 다시 가져 오지 않아 작동하지 않는 것으로 나타납니다. 생각? – David

+0

당신이 Intent에서 fileName을 설정하고 가져 오는 데 여분의 키로 사용해야하는 String 값을 가진 상수입니다 – eltabo

1

몇 가지.

1) 한 번에 하나의 활동 만 표시해야하므로 ImageView의 활동에서 startActivityForResult으로 시작하고 onActivityResult을 카메라 활동에 덮어 쓰지 않는 이유는 무엇입니까?

2) 응용 프로그램을 잘 모르겠지만 다음을 수행하여 사진을 찍는 것을 구현하면 더 쉽습니다. http://mobile.tutsplus.com/tutorials/android/android-sdk-quick-tip-launching-the-camera/.

3) 당신은 당신의 주요 활동의 onCreate 방법, 주요 활동에 대한 정적 참조를 노출 할 수 있습니다, 단순히 (나는이 방법을 권하고 싶지 않다)

MainActivity.staticRef...를 통해 액세스 staticRef = this; 같이하고 카메라 활동에 뭔가를 4) 메인 액티비티에 브로드 캐스트 리시버를 등록 할 수 있습니다. 메인 액티비티 또는 이미지 뷰를 참조하고 브로드 캐스트를 전송 한 카메라 액티비티에서 이미지 뷰를 설정할 수 있습니다.

+0

매우 자세한 답장을 보내 주셔서 감사합니다. startActibityForResult는 가장 좋은 접근 방법 인 것 같아요. 이전에 사용한 적이 없기 때문에 구현을 완전히 이해하기 위해 조금 읽었을 것입니다. 내 카메라는 특정 요구 사항에 맞게 고도로 맞춤화 된 OpenCV 활동입니다. 링크 2의 점을 보았지만 기본 카메라를 사용하는 것으로 제한되어 있다고 항상 생각했습니다. 맞습니까? – David

+0

네, 네이티브 카메라를 사용하는 것으로 제한되어 있습니다. 그래서 당신의 의도가 무엇인지 물었습니다. ''''startActivityForResult (intent, resultCode)'''와 이미지 처리가 끝났을 때 정확히 eltabo가 권장하는 것입니다 – vincentjames501

관련 문제