更改方向后,ImageView消失

时间:2015-10-01 09:16:55

标签: android layout android-studio orientation

我刚开始在Android上开发。到目前为止我正在学习东西。我遇到了这个问题。在我的onCreate方法中,我有一个按钮来选择设备中的图像和onActivityResult来获取图像并在ImageView中显示图像

在互联网上研究和寻找答案后,有人建议我错过了onSaveInstanceState。所以我创造了它。这是我的代码。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button buttonLoadImage = (Button)findViewById(R.id.buttonLoadPicture);
    targetImage = (ImageView) findViewById(R.id.imgView);
    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, RESULT_LOAD_IMG);
        }
    });
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putParcelable("BitmapImage", bitmap);
    super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    image = savedInstanceState.getParcelable("BitmapImage");
    targetImage.setImageBitmap(image);
}

@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
        try {
            if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK){
                Uri targetUri = data.getData();

                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = getContentResolver().query(targetUri, filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                imgDecodableString = cursor.getString(columnIndex);
                cursor.close();

                this.bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
                targetImage.setImageBitmap(bitmap);
            }
        }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }

}

构建并运行代码后,选择图像并在ImageView中显示它可以正常工作。当我更改方向时,仍会显示所选图像。然而,当我再次旋转时,显示的图像消失了。 我在哪里做错了。任何建议和帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

你正确存储'位图'吗?在这里,您将其存储到本地变量:

Bitmap bitmap;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
            targetImage.setImageBitmap(bitmap);

在这里你使用的是一个字段:

savedInstanceState.putParcelable("BitmapImage", bitmap);

看起来字段未设置,因此onSaveInstanceState存储空值。尝试删除Bitmap bitmap;或将bitmap = BitmapFactory...更改为this.bitmap = BitmapFactory

编辑:

还尝试在此处存储位图:

image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);

将其更改为:

image = savedInstanceState.getParcelable("BitmapImage");
this.bitmap = image;
targetImage.setImageBitmap(this.bitmap);

我不确定是什么图像,因为你没有在帖子中包含延期。