Я очень новичок в программировании на Android и экспериментирую с созданием приложения. В моем новом приложении у меня есть кнопка, которая позволяет им выбирать приложение на своем устройстве, такое как «Галерея», чтобы выбрать изображение. Затем это изображение отображается в окне просмотра изображений на экране активности. К сожалению, когда я переворачиваю свой телефон и меняю ориентацию, изображение теряется, и ему нужно снова выбрать его.Как сохранить изображение в активности Android во время изменения ориентации?
Как сохранить растровое изображение и повторно отобразить его после изменения ориентации?
Вот функция кода, которую я использую, чтобы пользователь мог выбрать графическое приложение, выбрать изображение и отобразить изображение в окне просмотра изображений.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK){
Uri targetUri = data.getData();
textTargetUri.setText(targetUri.toString());
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
targetImage.setImageBitmap(bitmap);
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
}
выше функция инициализируется в моей OnCreate в ответ на нажатие кнопки, показанной в этом коде:
Button buttonLoadImage = (Button)findViewById(R.id.loadimage);
textTargetUri = (TextView)findViewById(R.id.targeturi);
targetImage = (ImageView)findViewById(R.id.targetimage);
buttonLoadImage.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);
}});
По существу, я просто нужно поставить этот булево в моем OnCreate и он положил изображение обратно в окно. Он также отображает текст, показывающий, где изображение находилось на устройстве, но для меня это не так важно, как возможность остаться на экране.
if (savedInstanceState != null) {
}
Но, похоже, они стирают данные после изменения ориентации? Я понятия не имею, как сохранить данные и восстановить их для использования в этом булевом. Я ценю любой совет, код или ссылки, которые вы можете предоставить!
UPDATE:
Спасибо Вишал Виджай и rajahsekar для быстрых и полезных ответов. Используя как ваше рекомендуемое кодирование, так и некоторый код, который я нашел из предыдущего исследования, я смог скомпилировать решение. Однако, хотя он решил первую проблему, она породила другую, которую я опишу после показа кода, который я использовал для исправления исходной проблемы.
Я обнаружил, что у меня было 2 варианта для части восстановления.
Либо я мог бы поместить это в OnCreate:
if (savedInstanceState != null) {
//if there is a bundle, use the saved image resource (if one is there)
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);
textTargetUri.setText(savedInstanceState.getString("path_to_picture"));R.drawable.camera_button);
}
Это позволило мне иметь как изображение, а также путь к нему на устройстве, чтобы быть повторно отображается на моей деятельности.
Или я мог бы это после OnCreate
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);
textTargetUri.setText(savedInstanceState.getString("path_to_picture"));
}
и сберегательной функции, которые я использовал, был
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putParcelable("BitmapImage", bitmap);
savedInstanceState.putString("path_to_picture", picture_location);
}
Чтобы уточнить, где picture_location пришли, обратно в моей функции onActivityResult я добавил строку и изменил другой, чтобы сохранить строку пути
if (resultCode == RESULT_OK){
Uri targetUri = data.getData();
picture_location = targetUri.toString();
textTargetUri.setText(picture_location);
Что касается variab ле инициализируется перед OnCreate,
Bitmap image;
Bitmap bitmap;
String picture_location;
Теперь я понимаю, что это получило довольно длительным, но я надеюсь, что это поможет другим, которые могут иметь подобную проблему. Что касается новой проблемы, о которой я упоминал ранее, когда я вращаю свое устройство Android, он фактически сохраняет данные и повторно отображает их, как я пытался это сделать. Однако, когда я снова поворачиваю экран, возникает исходная проблема; данные, кажется, потеряны и не отображаются на экране.
Я надеюсь, что есть намного более простые исправления, так что функции сохранения и восстановления будут работать независимо от того, сколько раз меняется ориентация экрана?
Еще раз спасибо ребятам!
использовать Android-запрос для этого. – Kishan