【问题标题】:Fragment disappear after coming back from startActivityForResult从 startActivityForResult 回来后片段消失
【发布时间】:2014-12-21 17:53:50
【问题描述】:

我有一个奇怪的问题。

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

首页 -> 服务 -> 服务详情 -> 上传

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

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 )并立即选择照片,一切都会好起来的。

我对相机没有任何问题。

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

【问题讨论】:

    标签: android fragment onactivityresult android-nested-fragment


    【解决方案1】:

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

    在 Parent Activity 类中,重写 onActivityResult() 方法,甚至在 Fragment 类中重写,并调用如下代码。

    在父类中:

    @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
        }
    

    【讨论】:

    • 感谢您的回复,但正如我在回答中所说,我从 onActivityResult 获取数据没有任何问题,
    • 这是嵌套片段的常见问题。因此您可以管理片段调用或在子类中显示您想要的片段。当然,这是 hack,但它现在应该可以解决问题。除此之外,我正在尝试放置相同类型的代码,因此一旦找到实际解决方案,我会更新您。
    • 我没听懂,你的意思是我必须在代码中打开所有子片段吗?像在 onResume 检查一个布尔值并打开欲望片段?
    • Hardik 我得到了答案,感谢您的时间和解决方案。
    • 你是怎么做到的,能给我你的解决方案吗?
    【解决方案2】:

    我的问题已经通过改变解决了

     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 的启动意图和通常打电话告诉我有什么不同,谢谢

    【讨论】:

    • 我遇到了同样的问题,Intent.createChooser 在多个意图调用和合并时使用。
    • 这并不能解决问题。请详细说明您的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多