改变方向后 ImageView 消失
ImageView disappear after changed orientation
我刚刚在 Android 开始开发。到目前为止,我正在学习东西。我被这个问题困住了。在我的 onCreate 方法中,我有一个按钮 select 设备中的图像和 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();
}
}
构建和 运行 代码后,select 处理图像并将其显示在 ImageView 中工作正常。当我改变方向时,图像 selected 仍然显示。然而,当我再次旋转回来时,显示的图像消失了。
我哪里做错了。感谢任何建议和帮助。
您是否正确存储 'bitmap'?这里你将它存储到一个局部变量中:
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);
我不确定图像是什么,因为您没有在 post 中包含声明。
我刚刚在 Android 开始开发。到目前为止,我正在学习东西。我被这个问题困住了。在我的 onCreate 方法中,我有一个按钮 select 设备中的图像和 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();
}
}
构建和 运行 代码后,select 处理图像并将其显示在 ImageView 中工作正常。当我改变方向时,图像 selected 仍然显示。然而,当我再次旋转回来时,显示的图像消失了。 我哪里做错了。感谢任何建议和帮助。
您是否正确存储 'bitmap'?这里你将它存储到一个局部变量中:
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);
我不确定图像是什么,因为您没有在 post 中包含声明。