Android 重新创建活动后,对话框中的对象和变量为空
在我的活动中,当我单击actionbar中的菜单项时,会出现一个对话框。此对话框有一个ImageView。当我点击ImageView时,我可以打开相机。当我拍摄一张照片时,我的应用程序强制关闭,我想这是因为我无法在活动重新创建后在对话框中引用imageView,因为它不存在或未初始化 onActivityResultAndroid 重新创建活动后,对话框中的对象和变量为空,android,dialog,android-camera,activity-lifecycle,Android,Dialog,Android Camera,Activity Lifecycle,在我的活动中,当我单击actionbar中的菜单项时,会出现一个对话框。此对话框有一个ImageView。当我点击ImageView时,我可以打开相机。当我拍摄一张照片时,我的应用程序强制关闭,我想这是因为我无法在活动重新创建后在对话框中引用imageView,因为它不存在或未初始化 onActivityResult case PICK_FROM_CAMERA_EDIT: if (data != null) { Uri imageuri = data.getD
case PICK_FROM_CAMERA_EDIT:
if (data != null) {
Uri imageuri = data.getData();
Log.i("CAMERA_URI", String.valueOf(imageuri)); //content://media/external/images/media/72954
Bitmap bitmap;
try {
//creating bitmap from uri
edit_dialog.iv_bucket2.setImageBitmap(bitmap); //force close
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
看到了吗?这就是问题所在:
edit_dialog.iv_bucket2.setImageBitmap(scaled);
edit_dialog
不为空,但edit_dialog.iv_bucket2
为空
这在onCreate()
中定义为
edit_dialog = new EditBucketDialog(MyActivity.this);
点击菜单项时打开为
edit_dialog = new EditBucketDialog(MyActivity.this);
edit_dialog.setCancelable(true);
edit_dialog.show();
简而言之,这是一个类:
public class EditBucketDialog extends Dialog {
//variables
ImageView iv_bucket2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.edit_dialog);
iv_bucket2 = (ImageView)findViewById(R.id.iv_bucket2);
}
}
对于我想从onActivityResult引用的对话框中的其他变量也是如此
我也有
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
奇怪的是,这种情况只发生一次。我需要卸载并安装该应用程序才能再次出现此问题 您在何处铸造编辑对话框.iv_bucket2?什么?我不懂像edit_dialog.iv_bucket2=(位图)edit_dialog.findViewById(myid);显然,在对话课上。我添加了行,好吧,我这样问是因为我认为您需要重新初始化小部件,我有点困惑您调用摄像头以及在同一个按钮上显示对话框?如果我是对的,那么在设置图像之前,需要在相机单击之后初始化对话框类。