[英]OnActivityResult not getting called
In Activity A, I want to open a dialog (CustomDialog). 在活动A中,我想打开一个对话框(CustomDialog)。 Inside CustomDialog, it has a button to open a camera. 在CustomDialog内部,它具有一个打开照相机的按钮。 But the onActivityResult
not getting called after I pick an image from gallery. 但是从图库中选取图像后,不会调用onActivityResult
。 No toast
is getting displayed. 没有toast
被显示。
Activity A 活动A
private void openDialog() {
CustomDialog alert = new CustomDialog();
alert.showDialog(this);
}
CustomDialog 自定义对话框
public class CustomDialog extends Activity{
Activity activity;
ImageView imageView;
public void showDialog(Activity activity) {
this.activity = activity;
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.custom_dialog);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.setCanceledOnTouchOutside(true);
imageView = (ImageView) dialog.findViewById(R.id.logoApp);
Button galleryBtn = (Button) dialog.findViewById(R.id.galleryBtn);
galleryBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
galleryIntent();
}
});
dialog.show();
}
private void galleryIntent() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);//
activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(activity,"sdddddsss",Toast.LENGTH_LONG).show();
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
onSelectFromGalleryResult(data);
}else{
// ...
}
}
}
@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
} catch (IOException e) {
e.printStackTrace();
}
}
imageView.setImageBitmap(bm);
}
}
I follow this http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample 我遵循此http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
When you show dialog in Activity A, you set reference to Activity A as param: alert.showDialog(this);
在活动A中显示对话框时,可以alert.showDialog(this);
活动A的引用设置为参数: alert.showDialog(this);
Then inside CustomDialog, you save this reference as activity variable: 然后在CustomDialog中,将此引用另存为活动变量:
public void showDialog(Activity activity) { this.activity = activity; ...}
This means, that this.activity
is instance of Activity A. Later in your galleryIntent(), you start activity for result like this: 这意味着this.activity
是Activity A的实例。稍后,在您的galleryIntent()中,您将为以下结果启动活动:
private void galleryIntent() { ... activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1); }
This means that onActivityResult will be called in Activity A, not your Custom dialog, because you've used activity
variable. 这意味着onActivityResult将在活动A中而不是在“自定义”对话框中调用,因为您已经使用了activity
变量。
You have 2 options for fix: 您有2个修复选项:
1) replace activity.startActivityForResult
with CustomDialog.this.startActivityForResult
1)将activity.startActivityForResult
替换为CustomDialog.this.startActivityForResult
2) move your onActivityResult
code from CustomDialog into Activity A 2)将onActivityResult
代码从CustomDialog移到Activity A
You are calling: startActivityForResult
on activity
reference which is not the same as the CustomDialog
in which you expect onActivityResult
to be called. 您正在调用: activity
参考上的startActivityForResult
,它与希望在其上调用onActivityResult
的CustomDialog
。 I dont remember ever calling startActivityForResult
on instance of activity which is not foreground - I am not sure whether it will work. 我不记得曾经在不是前台的活动实例startActivityForResult
用过startActivityForResult
-我不确定它是否会起作用。 I suggest you to change: activity.startActivityForResult
to startActivityForResult
我建议您更改: activity.startActivityForResult
到startActivityForResult
btw. 顺便说一句 in your onActivityResult
you have called super.onActivityResult(requestCode, resultCode, data);
在您的onActivityResult
您已经调用了super.onActivityResult(requestCode, resultCode, data);
twice. 两次。 This is not correct. 这是不正确的。
之所以没有调用onActivityResult()的原因是因为当您为结果启动活动时即调用了onActivityResult(),即startActivityForResult(...),然后在启动的活动返回或结束时调用了onActivityResult()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.