我想在一个
奇怪的是,如果我直接在
我也尝试过在创建
Fragment
中,展示一个选择打开相机
/ 图库
的 Dialog
。
当按下一个Button
后,我会展示一个自定义的DialogFragment
(这个DialogFragment
是Fragment
内部定义的一个内部类)。
public static class AddPictureDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_add_picture_dialog, container, false);
getDialog().setTitle("New Picture");
Button openCameraButton = (Button) rootView.findViewById(R.id.open_camera_button);
openCameraButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("","Open Camera Option Selected");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CAMERA);
getDialog().dismiss();
}
});
Button openGalleryButton = (Button) rootView.findViewById(R.id.open_gallery_button);
openGalleryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("","Open Gallery Option Selected");
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Select File"), SELECT_FILE);
getDialog().dismiss();
}
});
return rootView;
}
}
选择一个选项后,Camera
/ Gallery
被初始化,但在拍照或选择图片后,方法 onActivityResult
没有被调用。
下面是创建 DialogFragment
的代码:
FragmentManager fm = getActivity().getSupportFragmentManager();
AddPictureDialogFragment addPictureDialogFragment = new AddPictureDialogFragment();
addPictureDialogFragment.show(fm, getTag());
奇怪的是,如果我直接在
Fragment
中创建DialogFragment
而不使用DialogFragment
,它就可以运行...我也尝试过在创建
DialogFragment
时这样做:addPictureDialogFragment.setTargetFragment(this, 1);
当初始化camera
Intent
时,要这样做:
Button openCameraButton = (Button) rootView.findViewById(R.id.open_camera_button);
openCameraButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("","Open Camera Option Selected");
getDialog().dismiss();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
getTargetFragment().onActivityResult(getTargetRequestCode(), 1, intent);
startActivityForResult(intent, REQUEST_CAMERA);
}
});
onActivityResult
方法在Fragment
中被调用,但是requestCode
是错误的。无论如何,我还是投了你的答案一票,感谢你的时间和努力 :) - Ale