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

在片段中获得非空上下文的保证方法是什么?

苍和裕
2023-03-14

我看到了许多如何在BaseFragment中获取上下文的示例,如下所示:

protected lateinit var ctx: Context

override fun onAttach(context: Context?) {
    super.onAttach(context)
    ctx = context!!
}

然后我们可以在扩展BaseFragment的其他片段中使用上下文实例。一、二、三(提供从onViewCreated()获取上下文)等等。看起来像是变通办法。

我也遇到过一些在Fragment中使用getActivity()或getContext()时发生“Fragment从Activity分离”异常的情况。

那么,真正的方法是什么?

共有1个答案

丌官皓君
2023-03-14

您不能保证上下文是100%非null,这就是为什么它被标记为nullable(?),所以您提到的“变通方法”实际上会在活动分离的情况下导致异常。为了避免这种情况,不要将ctx:context标记为lateinit var使其为nullableprotected var ctx:context?=null并在每次使用它时检查它的状态。

 类似资料:
  • 问题内容: 我有一个关于片段中上下文使用情况的问题。我的问题是,我总是收到NullpointerException。这是我的工作: 创建一个扩展SherlockFragment的类。在该类中,我有另一个Helper类的实例: 这是其他Helper类的摘录: 每次调用时(例如context.getResources()),我都会收到NullPointerException。这是为什么? 问题答案:

  • 我有一个包含多个按钮的活动,当单击一个按钮时,将打开一个包含两个片段的新活动。 我试图根据按下的按钮在其中一个片段中显示一个回收器视图。问题是捆绑包为空,所以回收器视图不显示。 捆绑包在<code>onAttach 碎片 公共类MyFragment扩展片段{

  • 我在过去的两个小时里一直在试图解决这个问题。试过很多东西。 该片段似乎正在向我的适配器传递空上下文。我尝试在onCreate和onCreateView和onActivityCreated中初始化上下文变量。同样的结果。

  • //hwutil.showtoast(this,fragmentManager.getBackStackEntryCount()+“”);} 在所有其他片段中,我使用活动作为上下文,我的问题是,以这种方式访问上下文是不好的方式,还是会造成内存泄漏。或者任何其他访问上下文的方法..任何帮助都是有用的。

  • 在下面的文章中,他们使用了哈希片段这个术语。我不太清楚他们这么说是什么意思。他们引用的是URL中哈希后面的文本吗? 例如 下面是我在文章中看到的简介 在隐式流中,访问令牌直接作为哈希片段传递(而不是作为URL参数)。关于哈希片段的一个重要问题是,一旦您跟踪包含哈希片段的链接,只有浏览器知道该哈希片段。浏览器将把散列片段直接传递到目标网页(重定向URI/客户端的网页)。哈希片段具有以下属性: