Android Imageview отображает старое растровое изображение после поворота экрана

Мое приложение должно сначала отображать изображение, когда нажимается кнопка, другое изображение отображается в представлении изображения. Однако при повороте экрана imageView отображает старое изображение. Как мне это исправить? (биты - это растровое изображение, загруженное в imageView при создании)

Мой код ниже:

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

    imageView.setImageBitmap(bits);

person jop    schedule 07.08.2013    source источник
comment
не могли бы вы показать свой oncreate метод этой деятельности?   -  person ArturSkowronski    schedule 07.08.2013


Ответы (1)


Я предполагаю, что вы устанавливаете первое изображение вашего ImageView в методе onCreate или 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;
}

Вы также можете прочитать этот метод, когда используете фрагменты:

Fragment.setRetainInstance

Или Bundle: (onSaveInstanceState(Bundle) также доступен в вашей деятельности)

//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");
  }
person Philipp Jahoda    schedule 07.08.2013
comment
Единственное, что меня беспокоит, onRetainNonConfigurationInstance устарело, не имеет значения? - person jop; 07.08.2013
comment
В качестве альтернативы вы также можете использовать Bundle. Я обновил свой ответ, чтобы показать, как это работает. - person Philipp Jahoda; 08.08.2013