2011-07-16 81 views
2

我有一個帶有位圖圖片的imageview。我在onActivityResault中設置了這張照片。問題是當我改變肖像/風景的圖像disapears。更改爲縱向/橫向時,ImageView消失

protected void onActivityResult(int requestCode,int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case 1: 
     if(resultCode == RESULT_OK){ 
      Uri selectedImage = imageReturnedIntent.getData(); 
      InputStream imageStream; 
      try { 
       imageStream = getContentResolver().openInputStream(selectedImage); 
       Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
       image.setImageBitmap(yourSelectedImage); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

回答

4

當方向更改活動被破壞並再次創建時。如果您使用xml創建佈局,則應該使用其內容自動重新創建所有擁有@id設置的小部件。否則,你必須手動執行此操作 - 查看Activity的方法onRestoreInstanceState() onSaveInstanceState()只需重寫它們並編寫自己的保存/恢復代碼。 一些未經測試的代碼,希望,它會給你一個想法:

@Override 
public void onSaveInstanceState(Bundle b){ 
    b.putParcelable("image", image.getBitmap()); 
} 

@Override 
public void onRestoreInstanceState(Bundle b){ 
    //you need to handle NullPionterException here. 
    image.setBitmap((Bitmap) b.getParcelable("image")); 
} 
+0

謝謝,但你能解釋這一點嗎? 我在我的活動中有一個位圖對象,我如何在這些方法上再次將圖像視圖圖片設置爲該位圖? – Yuval

+0

我編輯了我的答案。 – piotrpo

0

如果你給一個ID您的ImageView它不會消失,當你改變方向。我認爲這是最簡單的方法,保持你的觀點。

0

建立關piotrpo的答案,這裏是一個更具體的版本:

@Override 
public void onSaveInstanceState(Bundle b){ 
    b.putParcelable("image", imageMap); 
} 

@Override 
public void onRestoreInstanceState(Bundle b){ 
    imageMap = b.getParcelable("image"); 
    imageView.setImageBitmap(imageMap); 
} 

其中imageMap是位圖圖像

相關問題