我有一个加载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) {
}
}
答案 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)
}
}
}