OnActivityResult 未被调用
OnActivityResult not getting called
在ActivityA,我想打开一个对话框(CustomDialog)。在 CustomDialog 内部,它有一个按钮可以打开相机。但是 onActivityResult
在我从图库中选择图像后没有被调用。没有显示 toast
。
Activity一个
private void openDialog() {
CustomDialog alert = new CustomDialog();
alert.showDialog(this);
}
自定义对话框
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);
}
}
我关注这个http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
您正在调用:activity
上的 startActivityForResult
引用,它与您希望调用 onActivityResult
的 CustomDialog
不同。我不记得曾经在非前台的 activity 实例上调用过 startActivityForResult
- 我不确定它是否会起作用。我建议您将:activity.startActivityForResult
更改为 startActivityForResult
顺便说一句。在您的 onActivityResult
中,您已调用 super.onActivityResult(requestCode, resultCode, data);
两次。这是不正确的。
不调用 onActivityResult() 的原因是当您为结果启动 activity 时调用 onActivityResult() 即 startActivityForResult(...) 然后当启动 activity returns 或完成 onActivityResult() 被调用
当您在 Activity A 中显示对话框时,您将对 Activity A 的引用设置为参数:
alert.showDialog(this);
然后在 CustomDialog 中,将此引用保存为 activity 变量:
public void showDialog(Activity activity) {
this.activity = activity;
...}
这意味着,this.activity
是 Activity A 的实例。稍后在您的 galleryIntent() 中,您开始 activity 以获得这样的结果:
private void galleryIntent() {
...
activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
}
这意味着 onActivityResult 将在 Activity A 中调用,而不是您的自定义对话框,因为您使用了 activity
变量。
您有 2 个修复选项:
1) 将 activity.startActivityForResult
替换为 CustomDialog.this.startActivityForResult
2) 将您的 onActivityResult
代码从 CustomDialog 移动到 Activity A
在ActivityA,我想打开一个对话框(CustomDialog)。在 CustomDialog 内部,它有一个按钮可以打开相机。但是 onActivityResult
在我从图库中选择图像后没有被调用。没有显示 toast
。
Activity一个
private void openDialog() {
CustomDialog alert = new CustomDialog();
alert.showDialog(this);
}
自定义对话框
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);
}
}
我关注这个http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
您正在调用:activity
上的 startActivityForResult
引用,它与您希望调用 onActivityResult
的 CustomDialog
不同。我不记得曾经在非前台的 activity 实例上调用过 startActivityForResult
- 我不确定它是否会起作用。我建议您将:activity.startActivityForResult
更改为 startActivityForResult
顺便说一句。在您的 onActivityResult
中,您已调用 super.onActivityResult(requestCode, resultCode, data);
两次。这是不正确的。
不调用 onActivityResult() 的原因是当您为结果启动 activity 时调用 onActivityResult() 即 startActivityForResult(...) 然后当启动 activity returns 或完成 onActivityResult() 被调用
当您在 Activity A 中显示对话框时,您将对 Activity A 的引用设置为参数:
alert.showDialog(this);
然后在 CustomDialog 中,将此引用保存为 activity 变量:
public void showDialog(Activity activity) {
this.activity = activity;
...}
这意味着,this.activity
是 Activity A 的实例。稍后在您的 galleryIntent() 中,您开始 activity 以获得这样的结果:
private void galleryIntent() {
...
activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
}
这意味着 onActivityResult 将在 Activity A 中调用,而不是您的自定义对话框,因为您使用了 activity
变量。
您有 2 个修复选项:
1) 将 activity.startActivityForResult
替换为 CustomDialog.this.startActivityForResult
2) 将您的 onActivityResult
代码从 CustomDialog 移动到 Activity A