我有一个带有位图图片的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();
}
}
}
答案 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
是您的位图图片