当前位置: 首页 > 知识库问答 >
问题:

getParentFragmentManager中的片段未与片段管理器异常关联

别兴国
2023-03-14

我的照片应用程序里有一个片段。当用户编辑照片时,

    null

我的片段异步任务:

protected class CompressBitmapImageTask extends AsyncTask<Void, Void, byte[]>
    {
        private Bitmap editedImageBitmap;
        private BitmapDownscale bitmapDownscale;

        CompressBitmapImageTask(Bitmap editedImageBitmap, BitmapDownscale bitmapDownscale)
        {
            this.editedImageBitmap = editedImageBitmap;
            this.bitmapDownscale = bitmapDownscale;
        }

        @Override
        protected byte[] doInBackground(Void... params)
        {
            BitmapDownscale.BitmapDownscaleResult result = bitmapDownscale.downscaleFromBitmap(editedBitmap, true);
            return result.bitmapBytes;
        }

        @Override
        protected void onPostExecute(byte[] bytes)
        {
            onEditImageComplete(bytes);
        }
    } 
protected void onEditImageComplete(@Nullable byte[] editedBitmapData)
    {
        if (editedBitmapData != null)
            photoModel.editedBitmapData = editedBitmapData;
        getParentFragmentManager().popBackStack();
    }

我在调用getParentFragmentManager()时遇到异常。我提到了一个相关的帖子,Fragment MyFragment not attached to Activity,但它与Fragment not be Activity相关。所以我不确定添加isadded()是否可以解决我的问题。理想情况下,在尝试弹出backStack()时,我需要确保fragmentManager不为空。只有Androidx.fragment.app.fragment中的isStateSaved()方法可以实现,但我认为这不是一个合适的方法。谁能给我指出正确的方向吗?

共有1个答案

萧卜霸
2023-03-14

在进一步阅读了关于Fragment Manager的Android文档和这个未附加到Activity的答案片段MyFragment之后,我认为isAdded()检查是通过FragmentManager确认该片段是否与Activity相关联的方法。起初看方法的定义是令人困惑的,

/**
         * Return true if the fragment is currently added to its activity.
         */
        final public boolean isAdded() {
            return mHost != null && mAdded;
} 

因为它说明宿主是否不为空以及是否添加了片段。我认为关键是mAdded,它告诉我们片断是否被添加到片断管理器中。所以我用一个检查更新了我的popstack逻辑,

    protected void onEditImageComplete(@Nullable byte[] editedBitmapData)
    {
        if (editedBitmapData != null)
            photoModel.editedBitmapData = editedBitmapData;
        if (isAdded())
            getParentFragmentManager().popBackStack();
    } ```
 类似资料:
  • 我正在使用导航组件版本,并且我使用在3个屏幕之间来回导航 <代码>导航。findNavController(it)。导航(R.id.action\u参与者) 第二次浏览相同的屏幕后,我可以看到第二个片段,但我收到一个异常。我在FragmentManager上启用了日志,似乎有一个相同片段的不同实例没有附加,导致错误 关于导航组件为什么要创建另一个未连接的片段实例,有什么想法吗?有什么变通方法可以获

  • 我想在收到一些HTTP请求的响应后,更新几个<code>片段 。-- 活动 适配器 碎片样本 日志显示位置0,1处的片段的<code>updateData</code>工作良好。但是对于位置2处的片段,它会导致错误。 我发现的区别是适配器没有为位置2调用,这意味着没有调用的。因此不存在。 我的直觉告诉我,问题一定来自适配器的工作流或fragmentManager事务。但是作为一个Android初学

  • 我想要的正确行为是: 我目前的工作: 当我想从B回到A时,我使用了,但在这里一切都很顺利 我真的需要与管理器中包含的片段相同。 有人知道我做错了什么吗? 我的代码: 我已经搜索了一段时间没有结果的解决方案,所以请不要将此标记为重复。 提前感谢。

  • 设置文本指针异常,我得到错误。 } 我得到的错误; E/AndroidRuntime:致命异常:主进程:com.vortex.soruhafizam,PID:6341 java.lang.nullPointerException:尝试对位于com.vortex.soruhafizam.fragmentbirinci.onCreateView(Fragmentbirinci.java:32)的And

  • 我有一个,它创建一个,然后这个创建另一个: 这让我想到。是否真的可以删除并转到? 提前感谢您的时间,我在网上找不到任何合适的信息!

  • 我试图在列表视图的onItemClick中用另一个片段替换片段,我想将所选项目名称从列表片段发送到另一个片段,但它显示空指针异常 @覆盖onItemClick上的公共无效(AdapterView ar0,视图,int位置,长id){ 但是同样的概念在下面的按钮点击中工作