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

我有一个关于在片段中使用上下文的问题。我的问题是我总是得到一个NullpointerException。这是我所做的:

创建一个扩展夏洛克碎片的类。在该类中,我有另一个帮助程序类的实例:

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

    // More code ...
}

下面是另一个帮助程序类的摘录:

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

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


答案 1

您正在尝试获取 首次实例化的时间。当时,它没有附加到 一个 ,所以没有有效的 。ContextFragmentActivityContext

查看片段生命周期。两者之间的所有内容都包含对有效上下文实例的引用。此上下文实例通常通过以下方式检索onAttach()onDetach()getActivity()

代码示例:

private Helper mHelper;

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

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


答案 2

您何时实例化您的帮助程序类?确保它在片段的生命周期中位于 onActivityCreated() 之后。

http://developer.android.com/images/fragment_lifecycle.png

以下代码应该有效:

@Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    helper = new Helper(getActivity());
  }

推荐