0

In my fragment's onCreateView method, I am inflating a layout that contains a RecyclerView. However, when I try to reference the view, I get a NullPointerException at the following line:

mRecyclerView.setLayoutManager(mStaggeredLayoutManager);

What am I doing wrong?

Here is my code:

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstance){
        final StaggeredGridLayoutManager mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);

        mRecyclerView = (RecyclerView)getActivity().findViewById(R.id.list);
        mRecyclerView.setLayoutManager(mStaggeredLayoutManager);

        mRecyclerView.setHasFixedSize(true); //Data size is fixed - improves performance
        mAdapter = new TravelListAdapter(getActivity());
        mRecyclerView.setAdapter(mAdapter);
        return inflater.inflate(R.layout.start_fragment,container,false);
}
James Davis
  • 474
  • 4
  • 10
nazmul
  • 367
  • 2
  • 14

2 Answers2

2

You are doing getActivity.findViewById(), which wouldn't work. You just created the view, but it is not attached to the activity yet. For this to work, you have to find the view in the fragment's view, not the activity's view.

First, inflate the fragment's view, and then do inflatedView.findViewById(R.id.list).

Example:

public View onCreateView(...){
    View inflatedView = inflater.inflate(R.layout.start_fragment, container, false);

    mRecyclerView = (RecyclerView) inflatedView.findViewById(R.id.list);

    return inflatedView;
}
James Davis
  • 474
  • 4
  • 10
0
        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        final StaggeredGridLayoutManager mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView) view.findViewById(R.id.list);
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
mRecyclerView.setHasFixedSize(true);
mAdapter = new TravelListAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
super.onViewCreated(view, savedInstanceState);

        }

this is what I would do