I'm trying to do the clickable RecyclerView, I watched a tutorial  on how to do it, but it gave me interface NullPointerException when I click the RecyclerView.
public class ViewHolder extends RecyclerView.ViewHolder {
    View mView;
    private ViewHolder.ClickListener mClickListener;
    public interface ClickListener{
        void onItemClick(View view, int position);
    }
    public void setOnClickListener(ViewHolder.ClickListener clickListener){
        mClickListener = clickListener;
    }
    public ViewHolder(View itemView){
        super(itemView);
        mView = itemView;
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mClickListener.onItemClick(v, getAdapterPosition()); //Line that called the Exception
            }
        });
    }
}
Is it something that has to do with the interface? Do I need to pass the interface to adapter like this one suggests?
Here's the exception
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.jobseeker.ViewHolder$ClickListener.onItemClick(android.view.View, int)' on a null object reference
        at com.example.jobseeker.ViewHolder$1.onClick(ViewHolder.java:32)
...etc.
Here's the adapter
adapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(options) {
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, int i) {
        final View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.row, viewGroup, false);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TextView mCompNameTv = view.findViewById(R.id.rCompNameTv);
                TextView mDescTv = view.findViewById(R.id.rDescTv);
                TextView mPosTv = view.findViewById(R.id.rPosTv);
                ImageView mImageTv = view.findViewById(R.id.rImageIv);
                String mCompName = mCompNameTv.getText().toString();
                String mDesc = mDescTv.getText().toString();
                String mPos = mPosTv.getText().toString();
                Drawable mDrawable = mImageTv.getDrawable();
                Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();
                Intent intent = new Intent(viewGroup.getContext(), DetailActivity.class);
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                mBitmap.compress(Bitmap.CompressFormat.PNG, 80, stream);
                byte[] bytes = stream.toByteArray();
                intent.putExtra("image", bytes);
                intent.putExtra("companyName", mCompName);
                intent.putExtra("description", mDesc);
                intent.putExtra("position", mPos);
                startActivity(intent);
            }
        });
        return new ViewHolder(view);
    }
    @Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Model model) {
        holder.setDetails(model.getCompanyName(), model.getDescription(), model.getPosition(), model.getImage());
    }
    @Override
    public int getItemCount() {
        return super.getItemCount();
    }
};
 
     
    