0

Recyclerview in my Fragment is giving me this error but I couldn't figure it out. There are lots of questions about this issue but none of them solved my problem so far.

Here is a piece of code from my fragment:

 @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_home, container, false);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

    initCollapsingToolbar();

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);

    prepareSectors();

    try {
      Glide.with(this).load(R.drawable.cover).into((ImageView) view.findViewById(R.id.backdrop));
    } catch (Exception e) {
      e.printStackTrace();
    }

    return view;
  }
Ege Kuzubasioglu
  • 5,991
  • 12
  • 49
  • 85

2 Answers2

2

You did not create an instance of your adapter before setting it to RecyclerView.

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    // Your adapter initialization here
    adapter = new YourAdapter(getActivity(), ....);
    recyclerView.setAdapter(adapter);

UPDATE:

Get LayoutInflater from passed context. Update your SectorAdapter code portion as below:

public Context mContext; 
public List<Sector> sectorList;
LayoutInflater layoutInflater;

public SectorAdapter(Context mContext, List<Sector> sectorList) {
    this.mContext = mContext;
    this.sectorList = sectorList;
    layoutInflater = LayoutInflater.from(mContext);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = layoutInflater.inflate(R.layout.sector_card, parent, false);
    return new MyViewHolder(itemView);
}

Try moving your RecyclerView codes to onViewCreated()

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    sectorList = new ArrayList<>(); 
    prepareSectors(); 

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true)); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 

    adapter = new SectorAdapter(getActivity(), sectorList);
    recyclerView.setAdapter(adapter);
}

Hope this will help~

Ferdous Ahamed
  • 21,438
  • 5
  • 52
  • 61
0

There is no any code for your adapter. Thus you need to implement the adapter and pass the instance to the recyclerView.

RecyclerView.LayoutManager mLayoutManager ....
 ....
// Your adapter initialization here
adapter = new someAdapter(....);
recyclerView.setAdapter(adapter);

This will help you!

Sanjog Shrestha
  • 417
  • 9
  • 16