0

when I want use injected object in "onViewCreated" like this:

@Inject
ItemsManager itemsManager;

private RecyclerView mRecyclerView;
private ExercisesAdapter mAdapter;
private List<ExerciseModel> mModels;

public static ExercisesFragment newInstance() { return new ExercisesFragment(); }

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_exercises, container, false);

    mRecyclerView = (RecyclerView) view.findViewById(R.id.exercises_list);
    mModels = new ArrayList<>();
    itemsManager.getExercises();

    return view;
}

I got exception:

java.lang.RuntimeException: Unable to start activity ComponentInfo{fitmate.gorzala.com.fitmate_android/fitmate.gorzala.com.fitmate.activities.ExerciseActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5146)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at fitmate.gorzala.com.fitmate.activities.fragments.ExercisesFragment.onCreateView(ExercisesFragment.java:51)
        at android.app.Fragment.performCreateView(Fragment.java:1700)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
        at android.app.BackStackRecord.run(BackStackRecord.java:684)
        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)

Maybe someone have any idea how to solve this problem ? I have any required modules. In another view when I use injected object in "onActivityCreated", everything is ok

maciej
  • 51
  • 2

1 Answers1

2

Since you are doing your Dagger injections within the activity's onCreate method the first lifecycle when the injected fields will be available will be in the fragment's onActivityCreated. Inflate your views in onCreateView but setup your bindings and variables in onActivityCreated.

FriendlyMikhail
  • 2,857
  • 23
  • 39