#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
так, ваш приведенный выше код завершится ошибкой с aNullPointerException
; Harsha’s не будет.