Java OnActivityResult未被调用
在活动A中,我想打开一个对话框(CustomDialog)。在CustomDialog中,它有一个打开相机的按钮。但是在我从图库中选择了一张图像后,Java OnActivityResult未被调用,java,android,android-gallery,onactivityresult,Java,Android,Android Gallery,Onactivityresult,在活动A中,我想打开一个对话框(CustomDialog)。在CustomDialog中,它有一个打开相机的按钮。但是在我从图库中选择了一张图像后,onActivityResult没有被调用。没有显示toast 活动A private void openDialog() { CustomDialog alert = new CustomDialog(); alert.showDialog(this); } 自定义对话框 public class Cust
onActivityResult
没有被调用。没有显示toast
活动A
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);
}
}
我遵循您正在调用的:
activity
参考上的startActivityForResult
,它与您希望调用onActivityResult
的CustomDialog
不同。我不记得曾经在非前台的活动实例上调用过startActivityForResult
——我不确定它是否会工作。我建议您将:activity.startActivityForResult
更改为startActivityForResult
顺便说一句,在您的
onActivityResult
中,您调用了super.onActivityResult(请求代码、结果代码、数据)代码>两次。这是不正确的。您正在调用:activity
上的startActivityForResult
参考,它与您希望调用onActivityResult
的自定义对话框不同。我不记得曾经在非前台的活动实例上调用过startActivityForResult
——我不确定它是否会工作。我建议您将:activity.startActivityForResult
更改为startActivityForResult
顺便说一句,在您的onActivityResult
中,您调用了super.onActivityResult(请求代码、结果代码、数据)代码>两次。这是不正确的。之所以没有调用onActivityResult()的原因,是因为在为结果启动活动时调用了onActivityResult(),即startActivityForResult(…),然后在启动的活动返回或完成onActivityResult()时调用了onActivityResult()之所以没有调用onActivityResult()的原因,是因为onActivityResult()当您为结果启动活动时调用,即startActivityForResult(…),然后当启动的活动返回或在ActivityResult()上完成时调用当您在活动A中显示对话框时,您将对活动A的引用设置为参数:
alert.showDialog(此)代码>
然后在CustomDialog中,将此引用另存为活动变量:
public void showDialog(活动){
这个。活动=活动;
…}
这意味着,This.activity
是活动A的实例。稍后在GalleryContent()中,您将为如下结果启动活动:
private void gallerycontent(){
...
activity.startActivityForResult(Intent.createChooser(Intent,“选择文件”),1);
}
这意味着onActivityResult将在活动A中调用,而不是在自定义对话框中调用,因为您使用了Activity
变量
您有两个修复选项:
1) 将activity.startActivityForResult
替换为CustomDialog.this.startActivityForResult
2) 将您的onActivityResult
代码从CustomDialog移动到活动A当您在活动A中显示对话框时,您将对活动A的引用设置为参数:
alert.showDialog(此)代码>
然后在CustomDialog中,将此引用另存为活动变量:
public void showDialog(活动){
这个。活动=活动;
…}
这意味着,This.activity
是活动A的实例。稍后在GalleryContent()中,您将为如下结果启动活动:
private void gallerycontent(){
...
activity.startActivityForResult(Intent.createChooser(Intent,“选择文件”),1);
}
这意味着onActivityResult将在活动A中调用,而不是在自定义对话框中调用,因为您使用了Activity
变量
您有两个修复选项:
1) 将activity.startActivityForResult
替换为CustomDialog.this.startActivityForResult
2) 将您的onActivityResult
代码从CustomDialog移动到Activity A请参阅有关编写CustomDialog的方式的链接,以及有关正确使用activityForResult()的此链接。请参阅有关编写CustomDialog的方式的链接以及有关正确使用activityForResult()的此链接我的项目流程如下:从第一个活动-->活动A-->开始,然后单击活动A的按钮打开自定义对话框。接下来在对话框中选择图像-->在活动A中显示-->将所选图像返回到第一个活动。一切正常,但在此之后,当我单击firstActivity-->活动A-->然后再次返回firstActivity时,图像消失了。为什么会发生这种情况?如果没有看到活动A和firstActivity的代码,很难判断。如何存储图像?它只是在记忆中吗?当您返回时,您的活动可能已被破坏/重新创建?或者,在从活动A到第一个活动的第二次转换期间(当您没有通过对话框选择任何内容时),您可能返回空位图?我的代码不多。我可以将我的项目发送到github供您检查吗?当然,请将指向您的项目的链接发送给我。我的项目流程如下:从第一个活动-->活动A-->然后单击活动A的按钮以打开自定义对话框。接下来在对话框中选择图像-->在活动A中显示-->将所选图像返回到第一个活动。一切正常,但在此之后,当我单击firstActivity-->活动A-->然后再次返回firstActivity时,图像消失了。为什么会发生这种情况?如果没有看到活动A和firstActivity的代码,很难判断。如何存储图像?它只是在记忆中吗?当您返回时,您的活动可能已被破坏/重新创建?或者,在从活动A到第一个活动的第二次转换期间(当您没有通过对话框选择任何内容时),您可能返回空位图?我的代码不多。我可以将我的项目发送到github供您检查吗?当然可以,请将您项目的链接发送给我。