【问题标题】:Creating and Using a Fragment's View Whilst Not Visible To The User创建和使用用户不可见的片段视图
【发布时间】:2013-02-08 22:10:46
【问题描述】:

原因

我需要这样做,因为我想获取片段视图的可绘制缓存,然后从该视图创建一个位图。该位图随后将用于在 Facebook 上发布。

问题

当我创建我的 Fragment 时,没有创建视图,因为它们没有通过 Fragment Transaction 添加,并且因为它们包含的视图对用户不可见。

我也不想手动绘制这些视图,因为我不会得到屏幕的精确副本。

我的问题

有没有办法让 Fragment 具有完整的功能(与通过 FragmentTransaction 添加它的功能相同)而不实际显示 Fragment?

当片段不可见时,我需要能够访问片段的视图。

提前致谢

【问题讨论】:

  • 为什么要在实际添加到可见屏幕之前获取片段视图的位图?
  • 我想要该视图,因为我希望将其显示的内容转换为位图,然后我可以将其上传到 Facebook
  • 我明白,问题是为什么需要创建该位图之前用户会看到它(我假设会发生稍后当您将片段添加到布局中时)?
  • 我根本不希望用户看到片段,我只想创建这个片段来获取它的视图,然后再次销毁它。该片段是应用程序其他地方的另一个显示。
  • 那么你没有任何选择可以自己测量和绘制视图,那个片段在可视屏幕之外。

标签: android android-fragments android-view


【解决方案1】:

另一个问题涉及如何render activities into offscreen buffers。您可以使用此技术将片段渲染到屏幕外缓冲区。

技术涉及:

  • 使用 startActivityForResult() 而不是 startActivity() 启动新活动
  • 设置绘图缓存
  • 布局完成后使用 getDrawingBitmap()

【讨论】:

    【解决方案2】:

    我给here 的答案是否也适用于您的情况?基本上它使用不同的 FragmentTransaction 方法。

    【讨论】:

    • 很遗憾没有。不过谢谢!
    • 我的答案暗示的是在代码中实例化 Fragment,然后使用 show() 或 hide() 设置其可见性。这样您就可以使用 Fragment,但对用户不可见。
    【解决方案3】:

    有什么方法可以将片段添加到隐藏布局中?示例 XML:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/GoneFragmentContainer"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:visibility="gone" />
    

    然后在你的代码中:

    MyFragment myFragment = new MyFragment();
    getSupportFragmentManager().beginTransaction()
      .add(R.id.GoneFragmentContainer, myFragment)
      .commit();
    myFragment.getView().callMethodsOnMyNonVisibleFragment();
    

    【讨论】:

    • 我认为如果父视图组的可见性=消失,片段的 onCreateView 将永远不会被调用。
    【解决方案4】:

    我会尽量避免从View 中获取Bitmap,而是以其他方式获取它。然后,您可以在片段的 onAttach() 方法中进行所需的任何处理,当您在其父活动中实例化片段时会调用该方法,并且它会在它可见之前执行此操作。

    【讨论】:

    • 所以我要自己画?
    • 片段的视图直到 onCreateView() 方法才被创建。因此,如果您想从片段的视图中获取位图,则该位图必须在放入 ImageView 之前来自某个地方。我是说,在 onAttach() 方法中执行“从某处获取/处理位图”,这样您就可以在片段视图膨胀之前获得它。
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2020-12-24
    • 2022-08-14
    • 2017-08-03
    相关资源
    最近更新 更多