2013-08-07 40 views
2

我的應用程序應該首先顯示圖像,當按下按鈕時,另一圖像顯示在圖像視圖中。但是,當屏幕旋轉時,imageView會顯示舊圖像。我應該如何解決這個問題? (位是裝入的ImageView上創建位圖)Android Imageview在屏幕旋轉後顯示舊位圖

我的代碼如下:

RGBToBitmap(rgb.getWindow(), bits); //this loads a new image into bits 

    imageView.setImageBitmap(bits); 
+0

你能告訴你這種活動的方法嗎? – ArturSkowronski

回答

7

我想你要設置在OnCreate您的ImageView或你的活動OnStart方法的第一張圖像。

旋轉屏幕後,onCreate和onStart方法會再次被調用,因此ImageView會再次顯示第一個圖像。

爲了節省您的活動狀態,看看這個: http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

這可能是一個可能的解決方案:

Bitmap image = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

image = (Bitmap) getLastNonConfigurationInstance(); 

    if(bitmap == null){ 
     image = downloadImage(); 
     } 
    setImage(bitmap); 
} 


@Override 
public Object onRetainNonConfigurationInstance() { 
    return bitmap; 
} 

您也可以使用片段UR當讀取到這個方法:

Fragment.setRetainInstance 

還是捆綁:(的onSaveInstanceState(捆綁)也可以在你的Activity)

//Save it onSaveInstanceState: 

    @Override 
    public void onSaveInstanceState(Bundle toSave) { 
    super.onSaveInstanceState(toSave); 
    toSave.putParcelable("bitmap", bitmap); 
    } 
//nd get it back onCreate: 

@Override 
    public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    if (savedState != null) bitmap = savedState.getParcelable("bitmap"); 
    } 
+0

精彩,效果很好,謝謝! – jop

+0

我的一個擔心,onRetainNonConfigurationInstance被棄用,無所謂? – jop

+0

作爲替代,你也可以使用Bundle。我更新了答案以顯示它的工作原理。 –