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

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

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

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.someMethod (例如context.getResources())我得到一个NullPointerException。 这是为什么?

Solutions Collecting From Web of "为什么我的Fragment中的上下文为null?"

Fragment第一次被实例化时,你试图获得一个Context 。 那时候,它没有附加到一个Activity ,所以没有有效的Context

看看片段生命周期 。 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()

你什么时候实例化你的助手类? 确保在Fragment生命周期中的onActivityCreated()之后。

http://sofzh.miximages.com/java/fragment_lifecycle.png

下面的代码应该可以工作:

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

getActivity()如果在onAttach()被调用之前被调用,则可以返回null 。 我会推荐这样的东西:

 public class Fragment extends SherlockFragment { private Helper helper; // Other code @Override public void onAttach(Activity activity) { super.onAttach(activity); helper = new Helper(activity); } }