在Dialog Fragment中没有调用onActivityResult

时间:2015-07-06 19:43:46

标签: java android android-activity

所以,我已经阅读了一些有关此问题的帖子,但我无法解决这个问题。 基本上我有这个对话框,用户可以选择拍摄新照片或从他们的画廊中选择一张照片。这是代码:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setCancelable(true)
    .setItems(R.array.galeria_camera_array, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int userChoice) {
            if (userChoice == 1) {
                // take photo
            }
            if (userChoice == 0) {
                Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(galleryIntent, 1);
            }
        }
    });

    return builder.create();
}

然后,onActivityResult:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //choose file from gallery
}

有人可以帮忙吗?在我不得不重新阅读10页理论之前......我对这类事情很新(onResult)。谢谢。

3 个答案:

答案 0 :(得分:0)

解决此问题的简便方法是将片段的onActivityResult移动到您的活动中,或者您可以使用活动的onActivityResult来调用片段中的方法。

我查看了我的代码,显然我设法通过从我的片段调用this.getActivityForResult来解决这个问题,然后结果返回到我的片段,但我会诚实地对你说:我不记得了写这个。

答案 1 :(得分:0)

尝试在触发对话框片段的活动中实现类似的操作:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.myFragmentId);
        fragment.onActivityResult(requestCode, resultCode, data);

下划线活动是接受onActivityResult的,所以你应该能够指出'它朝向对话框片段的onActivityResult。

答案 2 :(得分:0)

好的,这两件事使它成功了:

  1. getActivity().startActivityForResult(galleryIntent, 1);您必须添加getActivity()
  2. 正如你们所说,你必须在活动本身中声明onActivityResult()
  3. 谢谢你们!