Android ImageView содержание исчезает после показа

Мое приложение делает это: делает фотографию, затем показывает фотографию в ImageView. Странно то, что фотография отображается в течение примерно одной секунды (после того, как она сделана камерой), а затем изображение снова становится пустым.

Это мой код:

publish.xml

<ImageView
    android:id="@+id/itemImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
     />

PublishActivity.java

package ar.com.guiagratis;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class PublishActivity extends Activity {
    final int TAKE_PICTURE_REQUEST_CODE = 115;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.publish);        
    }

    public void btnNextClick(View v) {
        // TODO: disable all buttons
        //Intent intent=new Intent(getApplicationContext(), TakePhotoActivity.class);
        // startActivityForResult(intent, TAKE_PICTURE_RESULT_CODE);    

         Toast.makeText(getApplicationContext(), "Sacate una foto viteh", Toast.LENGTH_SHORT).show();

         Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
         File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
         Uri imageUri = Uri.fromFile(photoFile);
         intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
         startActivityForResult(intent, TAKE_PICTURE_REQUEST_CODE);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {        
        switch (requestCode) {
            case TAKE_PICTURE_REQUEST_CODE:
                if (resultCode == Activity.RESULT_OK) {
                    File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
                    Uri imageUri = Uri.fromFile(photoFile);

                    // Image captured and saved to fileUri specified in the Intent
                    Toast.makeText(this, "Image saved to:\n" +
                            imageUri, Toast.LENGTH_LONG).show();

                    Bitmap myBitmap = BitmapFactory.decodeFile(imageUri.getPath());
                    BitmapDrawable ob = new BitmapDrawable(myBitmap);
                    ImageView myImage = (ImageView) findViewById(R.id.itemImage);
                    myImage.setBackgroundDrawable(ob);

                    Toast.makeText(getApplicationContext(), "Qué linda foto! ", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), "Hubo un problema al subir la imágen... ", Toast.LENGTH_SHORT).show();                  
                }
        }
    }
}

Любая помощь будет оценена.

2 ответа

Решение

Хорошо, я наконец нашел проблему. Я не знал, что мне нужно использовать onSaveInstanceState и onRestoreInstanceState для хранения значений, которые я не хочу терять из Activity, когда я делаю определенные вещи, такие как запуск камеры и фотографирование.

Поэтому я добавил этот код:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate if the process is
    // killed and restarted.
    savedInstanceState.putBoolean("photoUploaded", photoUploaded);   
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate.
    photoUploaded = savedInstanceState.getBoolean("photoUploaded");

    if (photoUploaded) {
        File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
        Uri imageUri = Uri.fromFile(photoFile);

        Bitmap myBitmap = BitmapFactory.decodeFile(imageUri.getPath());
        BitmapDrawable ob = new BitmapDrawable(myBitmap);
        ImageView myImage = (ImageView) findViewById(R.id.uploadedImage);
        myImage.setBackgroundDrawable(ob);
    }   
}

и сейчас работает.

Не уверен, как сделать так, чтобы этот вопрос был решен.

Вы используете setBackgroundDrawable(Drawable drawable) который устанавливает фон представления.

Если вы хотите изменить содержимое ImageView, вы должны использовать

setImageDrawable(Drawable drawable)

или же

setImageBitmap(Bitmap bm)
Другие вопросы по тегам