onSaveInstanceState сохранение состояния ImageButton

#android #save

#Android #Сохранить

Вопрос:

Я использую кнопку ImageButton для выбора фотографии профиля пользователя в процессе регистрации. Для обработки поворота между портретным и альбомным режимами. я хочу сохранить состояние фона.

Для EditText я делаю это

onSaveInstanceState

 EditText FirstName = (EditText) findViewById(R.id.FirstName);
String firstName = FirstName.getText().toString();
savedInstanceState.putString("FirstName", firstName);
 

onRestoreInstanceState

     String firstName = savedInstanceState.getString("FirstName");
    if (firstName != null) {
        EditText FirstName = (EditText) findViewById(R.id.FirstName);
        FirstName.setText(firstName);
    }
 

Как я могу сделать то же самое для ImageButton?

я устанавливаю ImageButton следующим образом

             Uri selectedImageUri = data.getData();

            // MEDIA GALLERY
            selectedImagePath = getPhotoPath(selectedImageUri);

            // OI FILE Manager
            filemanagerstring = selectedImageUri.getPath();

            // NOW WE HAVE OUR WANTED STRING
            if (selectedImagePath != null) {
                SelectedPhoto = BitmapFactory.decodeFile(selectedImagePath);
                DisplayPhoto.setImageBitmap(SelectedPhoto);
                String bans = DisplayPhoto.getBackground().toString();
                Log.i("Bakasura", bans);
            } else{
                SelectedPhoto = BitmapFactory.decodeFile(filemanagerstring);
                DisplayPhoto.setImageBitmap(SelectedPhoto);
            }
 

Ответ №1:

Поскольку вы сохраняете состояние специально для обработки вращения, лучшим вариантом здесь является использование onRetainNonConfigurationInstance ; включено именно для такой цели. Переопределите этот метод в действии, чтобы вернуть само изображение (или объект, который его содержит):

 public Object onRetainNonConfigurationInstance()
{
   return bitmapImage;
}
 

Затем будьте готовы получить его снова в onCreate :

 Object last = getLastNonConfigurationInstance();
if( last != null )
{
   DisplayPhoto.setImageBitmap( (Bitmap) last );
}
 

Обратите внимание, что в Honeycomb и более поздних версиях вы должны использовать setRetainInstance() on a fragment , а не использовать этот метод; но пока совместимость не будет приемлемой не ранее Honeycomb, это лучшее решение.

Комментарии:

1. Конечно! Он также работает в Honeycomb; но в API есть примечание о том, что он устарел, что означает, что он может быть прекращен, как только появится Ice Cream Sandwich (хотя я сомневаюсь, что он так быстро умрет).

Ответ №2:

вы можете сохранить uri часть изображения. и использовать

 imagebutton.setImageURI(uri);
 

Ответ №3:

вы не можете проверить строку с помощью =
ie.

 Uri selectedImageUri = data.getData();
String selectedImagePath ="";
selectedImagePath = getPhotoPath(selectedImageUri);

          if (!selectedImagePath.equalsIgnoreCase("")) {
                SelectedPhoto = BitmapFactory.decodeFile(selectedImagePath);
                DisplayPhoto.setImageBitmap(SelectedPhoto);
                String bans = DisplayPhoto.getBackground().toString();
                Log.i("Bakasura", bans);
            } else{
                SelectedPhoto = BitmapFactory.decodeFile(filemanagerstring);
                DisplayPhoto.setImageBitmap(SelectedPhoto);
            }
 

Комментарии:

1. Джаз, это неверно. Строка — это объект, подобный любому другому, и сравнение с null ним — это не то же самое, что проверка пустой строки. Кроме того, если selectedImagePath == null это true так, ваш приведенный выше код завершится ошибкой с a NullPointerException ; Harsha’s не будет.