强制正确onActivityResult方法调用 - Android

时间:2018-05-29 18:13:51

标签: android android-fragments android-intent

我有一个加载DialogFragment的Fragment。加载的DialogFragment是一种弹出式样式,允许用户选择照片或从相机中取出照片。我在DialogFragment类中有一个onActivityResult方法,我想在拍摄照片或从画廊中选择它时调用它。

问题是,我在父片段中也有一个onActivityResult。我添加了它,所以我可以在创建对话框时设置目标片段,然后在对话框关闭时获得回调,这样我就知道要执行其他操作。

我用它来显示我的主片段中的DialogFragment ......

DialogFragment profilePhotoChoose = new ProfilePhotoChoose();
profilePhotoChoose.setShowsDialog(true);
profilePhotoChoose.setCancelable(false);
profilePhotoChoose.setTargetFragment(MyMainFragment.this, REQUEST_CODE); // request code is simply int value
profilePhotoChoose.show(getActivity().getSupportFragmentManager(), "dialogPhotoChoose");

会发生什么,主要片段的onActivityResult方法被触发,而不是对话片段的onActivityResult。

如何确保拨打正确的电话?我是否需要在触发相机或图库的意图中添加内容?

更新

以下是我用于从DialogFragment中启动相机意图的代码。请注意,我正在使用支持DialogFragment。

Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if(pictureIntent.resolveActivity(getActivity().getPackageManager()) != null){
                    try {
                        File file = .... // file stuff here
                        if (file != null) {
                            Uri photoURI = FileProvider.getUriForFile(getActivity(),"com.MYAPPID.android.provider", file);
                            pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                            startActivityForResult(pictureIntent, REQUEST_CAPTURE_IMAGE);
                        }
                    } catch (Exception ex) {

                    }
                }

2 个答案:

答案 0 :(得分:1)

首先在活动中收到事件,然后您需要将其重定向到片段,因此在活动:< / p>

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    Fragment yourChildFragment = getSupportFragmentManager().findFragmentByTag("YOUR_TAG");
    yourChildFragment.onActivityResult(requestCode, resultCode, data);
}

这应该调用片段 onActivityResult。如果要将其转发到特定呼叫,可以尝试添加requestCode检查。

答案 1 :(得分:0)

您不需要在DialogFragment中使用onActivityResult(),而是可以检查主片段onActivityResult()方法中的请求代码 开始您的意图如下:

startActivityForResult(intent, REQUEST_CODE);

并在onActivityResult()方法中检查请求代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}