2013-08-07 41 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。我更新了答案以显示它的工作原理。 –