I have got a question regarding the usage of context in a fragment. My problem is that I always get a NullpointerException. Here is what i do:
Create a class that extends the SherlockFragment. In that class I have an instance of another Helper class:
public class Fragment extends SherlockFragment {
private Helper helper = new Helper(this.getActivity());
// More code ...
}
Here is an extract of the other Helper class:
public class Helper {
public Helper(Context context) {
this.context = context;
}
// More code ...
}
Everytime I call context.someMethod (e.g. context.getResources() ) I get a NullPointerException. Why is that?
You're attempting to get a Context when the Fragment is first instantiated. At that time, it is NOT attached to an Activity, so there is no valid Context.
Have a look at the Fragment Lifecycle. Everything between onAttach() to onDetach() contain a reference to a valid Context instance. This Context instance is usually retrieved via getActivity()
Code example:
private Helper mHelper;
@Override
public void onAttach(Activity activity){
super.onAttach (activity);
mHelper = new Helper (activity);
}
I used onAttach() in my example, @LaurenceDawson used onActivityCreated(). Note the differences. Since onAttach() gets an Activity passed to it already, I didn't use getActivity(). Instead I used the argument passed. For all other methods in the lifecycle, you will have to use getActivity().
When are you instantiating your Helper class? Make sure it's after onActivityCreated() in the lifecycle of the Fragment.
http://developer.android.com/images/fragment_lifecycle.png
The following code should work:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
helper = new Helper(getActivity());
}
getActivity() can return null if it gets called before onAttach() gets called. I would recommend something like this:
public class Fragment extends SherlockFragment {
private Helper helper;
// Other code
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
helper = new Helper(activity);
}
}
I had the same problem after migrating from android.support to androidx. The problem was a bug in androidx library, described here:
https://issuetracker.google.com/issues/119256498
Solution:
// Crashing:
implementation "androidx.appcompat:appcompat:1.1.0-alpha01"
// Working:
implementation "androidx.appcompat:appcompat:1.1.0-alpha03"
来源:https://stackoverflow.com/questions/18154905/why-is-my-context-in-my-fragment-null