更改为纵向/横向时,ImageView会消失

时间:2011-07-16 09:01:31

标签: java android image android-activity imageview

我有一个带有位图图片的imageview。我在onActivityResault中设置了这张照片。问题是,当我改变为肖像/风景时,图像会消失。

protected void onActivityResult(int requestCode,int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case 1:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            InputStream imageStream;
            try {
                imageStream = getContentResolver().openInputStream(selectedImage);
                Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                image.setImageBitmap(yourSelectedImage);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

3 个答案:

答案 0 :(得分:4)

当方向更改活动被销毁并再次创建时。如果您使用xml创建布局,则所有具有@id set的小部件都应该使用它的内容自动重新创建。否则你必须手动执行 - 看看Activity的方法onRestoreInstanceState() onSaveInstanceState()只需覆盖它们并编写自己的保存/恢复代码。 一些未经测试的代码,希望它会给你一个想法:

@Override
public void onSaveInstanceState(Bundle b){
    b.putParcelable("image", image.getBitmap());
}

@Override
public void onRestoreInstanceState(Bundle b){
    //you need to handle NullPionterException here.
    image.setBitmap((Bitmap) b.getParcelable("image"));
}

答案 1 :(得分:0)

如果您为图像视图提供ID,则在更改方向时它不会消失。我认为保持这种观点是最简单的方法。

答案 2 :(得分:0)

建立piotrpo的答案,这是一个更具体的版本:

@Override
public void onSaveInstanceState(Bundle b){
    b.putParcelable("image", imageMap);
}

@Override
public void onRestoreInstanceState(Bundle b){
    imageMap = b.getParcelable("image");
    imageView.setImageBitmap(imageMap);
}

其中imageMap是您的位图图片