代码之家  ›  专栏  ›  技术社区  ›  Phil

强制正确的OnActivityResult方法调用-Android

  •  0
  • Phil  · 技术社区  · 6 年前

    我有一个加载对话片段的片段。加载的DialogFragment是一种弹出式样式,允许用户选择一张照片或从相机中拍摄一张照片。我的DialogFragment类中有一个OnActivityResult方法,当他们拍摄照片或从图库中选择照片时,我想调用它。

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

    我用这个来显示主片段中的对话片段…

    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方法,而不是DialogFragment的OnActivityResult。

    我如何确保它调用的是正确的?我是否需要为触发相机或画廊的意图添加一些内容?

    更新

    下面是我在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 回复  |  直到 6 年前
        1
  •  1
  •   Suleyman    6 年前

    当事件在 首先,您需要将其重定向到 碎片 ,所以在你的 活动 :

    @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 . 如果要将其转发到特定的调用,可以尝试添加请求代码检查。

        2
  •  0
  •   Mirza Ahmed Baig    6 年前

    您不需要在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)
            }
        }
    }