gpt4 book ai didi

android - fragment 与 getParentFragmentManager 中的 fragment 管理器异常无关

转载 作者:行者123 更新时间:2023-12-04 12:36:36 27 4
gpt4 key购买 nike

我的照片应用中有一个 fragment 。当用户编辑照片时,

  • 我启动一个 AsyncTask 在后台压缩图像,这将返回压缩的图像字节。
  • 在 postExecute() 中,我调用了一个 editComplete 方法,该方法将使用压缩图像字节
  • 更新我的数据模型
  • 完成后,我调用 getParentFragmentManager 到 popBackStack 以将编辑模式删除到画廊模式

  • 在这里调用 getParentFragmentManager() 时,我得到 IllegalStateException: "Fragment "+ this + "not associated with a fragment manager。"
    我的 fragment 异步任务:
    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 与 Activity 无关。所以我不确定是否添加 isAdded()将解决我的问题。
    理想情况下,当我尝试弹出 backStack() 时,我需要确保 fragmentManager 不为空。唯一可行的方法是 androidx.fragment.app.Fragment 中的 isStateSaved() 但我认为这不是一个合适的方法。
    有人可以指出我正确的方向吗?

    最佳答案

    在进一步阅读 Fragment Manager 上的 Android 文档和这个答案后 Fragment MyFragment not attached to Activity ,我相信isAdded()检查是通过fragmentManager确认fragment是否与activity关联的方式。一开始看方法的定义很困惑,

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


    因为它表示主机是否不为空以及是否添加了 fragment 。我认为关键是 mAdded ,它告诉我们是否将 fragment 添加到 fragment 管理器。所以我用检查更新了我的popstack逻辑,
        protected void onEditImageComplete(@Nullable byte[] editedBitmapData)
    {
    if (editedBitmapData != null)
    photoModel.editedBitmapData = editedBitmapData;
    if (isAdded())
    getParentFragmentManager().popBackStack();
    } ```

    关于android - fragment 与 getParentFragmentManager 中的 fragment 管理器异常无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60982029/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com