为什么我的Fragment中的上下文为null?

use*_*316 10 java android nullpointerexception android-context

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

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

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

    // More code ...
}
Run Code Online (Sandbox Code Playgroud)

以下是其他Helper类的摘录:

public class Helper {
    public Helper(Context context) {
        this.context = context;
    }
    // More code ...
}
Run Code Online (Sandbox Code Playgroud)

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

A--*_*--C 22

你试图Context在第Fragment一次实例化时得到一个.那时,它没有附加到Activity,所以没有效果Context.

看看片段生命周期.介于两者之间的onAttach(),以onDetach()包含一个有效的上下文实例的引用.通常通过检索此Context实例getActivity()

代码示例:

private Helper mHelper;

@Override
public void onAttach(Activity activity){
   super.onAttach (activity);
   mHelper = new Helper (activity);
}
Run Code Online (Sandbox Code Playgroud)

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