当前位置: 首页 > 面试题库 >

为什么片段中的上下文为空?

车胤运
2023-03-14
问题内容

我有一个关于片段中上下文使用情况的问题。我的问题是,我总是收到NullpointerException。这是我的工作:

创建一个扩展SherlockFragment的类。在该类中,我有另一个Helper类的实例:

public class Fragment extends SherlockFragment { 
    private Helper helper = new Helper(this.getActivity());

    // More code ...
}

这是其他Helper类的摘录:

public class Helper {
    public Helper(Context context) {
        this.context = context;
    }
    // More code ...
}

每次调用时context.someMethod(例如context.getResources()),我都会收到NullPointerException。这是为什么?


问题答案:

您正在尝试ContextFragment首次实例化时获取一个。当时,它未附加到Activity,因此没有有效的Context

看看Fragment
Lifecycle
。介于两者之间的onAttach(),以onDetach()包含一个有效的上下文实例的引用。通常通过以下方式检索此Context实例getActivity()

代码示例:

private Helper mHelper;

@Override
public void onAttach(Activity activity){
   super.onAttach (activity);
   mHelper = new Helper (activity);
}

onAttach()在示例中使用了@LaurenceDawson
onActivityCreated()。注意差异。由于onAttach()得到一个Activity传递给它了,我没有用getActivity()。相反,我使用了传递的参数。对于生命周期中的所有
其他 方法,您必须使用getActivity()



 类似资料:
  • 问题内容: 这是我第一次使用片段(android开发人员是新手),并且我正在尝试设置一个微调器。目前,我对上下文非常困惑,似乎无法解决此错误: 这是其所引用的代码: HotkeysFragment.java 具体行是: 进口: 我怎样才能解决这个问题? 问题答案: 来自Fragments的Android文档,来自此处: 警告:如果您在Fragment中需要一个Context对象,则可以调用getA

  • 问题内容: 无论我在哪里看,似乎都可以用作。为什么总是看到? 问题答案: 您基本上可以使用,或者仍然可以使用,但是您的问题的答案在的文档中: FrameLayout旨在遮挡屏幕上的某个区域以显示单个项目。通常,应使用FrameLayout来保存单个子视图,因为在子视图彼此不重叠的情况下,难以以可扩展到不同屏幕尺寸的方式组织子视图。不过,您可以使用android:layout_gravity属性将多

  • 有人有教程来实现使用支持库v7(appcomat_v7)的片段中的CAB吗? 我不知道该怎么做,我找不到一个教程来解释一个片段中的实现和使用支持库。 谢谢你的阅读。

  • 我看到了许多如何在BaseFragment中获取上下文的示例,如下所示: 然后我们可以在扩展BaseFragment的其他片段中使用上下文实例。一、二、三(提供从onViewCreated()获取上下文)等等。看起来像是变通办法。 我也遇到过一些在Fragment中使用getActivity()或getContext()时发生“Fragment从Activity分离”异常的情况。 那么,真正的方法