【问题标题】:What to do when context is null in fragment当片段中的上下文为空时该怎么办
【发布时间】:2019-05-03 23:43:54
【问题描述】:

如果上下文为空,简单地从方法返回并且不执行任何操作是否安全(正确)?目前,每当我需要片段中的上下文时,我都会这样做。

Context context = getContext();
if(context == null) return;

我的问题太愚蠢太明显了,但我仍然不确定这是否正确。如果有必要。 (也许我应该记录警告?)


当需要时,我在视图持有者和内部视图点击侦听器中从 itemView 获取上下文时,会在 onCreateViewonViewCreated 中进行此检查。

【问题讨论】:

    标签: android android-fragments exception-handling android-context


    【解决方案1】:

    由于您的代码在您必须使用的片段中:

    getActivity()
    

    获取宿主活动的上下文。
    为什么会得到 null 上下文?
    onAttach() 之后可以使用getContext()

    【讨论】:

    • 我从来没有得到空上下文,只是我不知道它是否会为空,因为返回类型可以为空。以及我应该如何处理。
    • 如果我们在代码中使用的每个对象都写if (obj != null),那么我们的类将被ifs和returns填充。如果您知道每个上下文何时有效,请不要进行太多检查。
    • 谢谢,这正是我想知道的!上下文何时有效?
    • 查看此链接,其中提到了有关片段生命周期的所有内容:google-developer-training.gitbooks.io/…
    • 反正标准是onAttach()之后,getContext()才有效。
    【解决方案2】:

    我认为重新运行并且什么都不做与捕获异常并吞下它一样糟糕。

    Fragment 有一个方法requireContext()。当上下文为空时,它只会使应用程序崩溃。实际上,我从未见过我的应用程序因此而崩溃。所以我猜片段中的空上下文是一种非常罕见和极端的情况。

    onViewCreated 中,您还可以从创建的视图中获取上下文。它不为空,因为视图创建需要上下文。

    如果需要一些资源,也可以用getResources().getString()代替getContext().getString()

    【讨论】:

    • 谢谢,我想我可以在我 100% 确定它不为空的情况下使用requireContext。就像在@forpas 提到的那样调用onAttach 之后
    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多