从startActivityForResult返回后片段消失

时间:2014-12-21 17:53:51

标签: android fragment onactivityresult android-nested-fragment

我有一个奇怪的问题。

我在我的代码中使用嵌套片段,(4级)

主页 - >服务 - > ServiceDetails - >上传

在最后一个片段(Upload Fragment)中我想从图库或相机中选择图像,所以我编写了以下代码来选择图像:

switch (which) {
    case galleryItem:
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(
                Intent.createChooser(intent, “Select Album”,
                Home.GALLERY_REQUEST);
        break;

    case cameraItem:
        Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent,
                Home.CAMERA_REQUEST);
        break;

并且每件事都没问题。 我可以使用以下代码从我片段的onActivityResult中的所选图片中获取URI:

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

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == Home.GALLERY_REQUEST) {
            Uri selectedImageUri = data.getData();

        } else if (requestCode == Home.CAMERA_REQUEST) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            Uri cameraUri = getImageUri(
                    getActivity().getApplicationContext(), photo);

        }
    }
}

问题

如果我打开我的相册并滚动(查看所有缩略图),在选择我在片段中调用的图片onActivityResult后,片段再也不可见了Home片段(第一片段)在我的应用中可见。 但如果我打开相册(通过startActivityForResult)并立即选择照片,一切都会好的。

我对相机没有任何问题。

我搜索了很多,但没有找到任何有用的数据, 如果你想看到我的代码的任何部分告诉我。 我没有得到任何崩溃只是我失去了我的最后一个片段。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

我的问题已通过更改

解决了
 Intent intent = new Intent();
 intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
 startActivityForResult(
        Intent.createChooser(intent, “Select Album”,
        Home.GALLERY_REQUEST);

到:

Intent intent = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, Home.GALLERY_REQUEST);

我不知道为什么,但是如果有人知道Intent.createChooser开始意图和通常打电话告诉我之间有什么不同,谢谢

答案 1 :(得分:0)

从fragment到onActivityResult函数的显式调用如下

在Parent Activity类中,覆盖onActivityResult()方法,甚至在Fragment Class中覆盖它,并调用以下代码。

在父类中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
}

在儿童班:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //in fragment class callback
    }