I have a listview that displays data from firebase.The listview works prefectly.But now i would like to implement an onclick listener in my recycler adapter that then displays more details in a new activity. I have searched everywhere for a solution but cant figure it out.I know i am supposed to be using firebase UI.
This is the fragment thats displaying the data from firebase to listview using recycler adaper:
 public class CategoryFragment extends Fragment {
    private static final String TAG = "CategoryFragment";
    private RecyclerView recyclerView;
    private RecyclerView.Adapter adapter;
    // private Adapter adapter;
    private List<ListItem> listItems;
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference myRef;
    private AdapterView.OnItemSelectedListener listener;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
 View rootView =inflater.inflate(R.layout.recycler_view,container,false);
        listItems = new ArrayList<>();
         adapter = new CategoryRecycler(listItems,getContext());
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        getFirebaseData();
        progressBar = rootView.findViewById(R.id.progressBar);
        recyclerView = rootView.findViewById(R.id.my_recycler_view);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        int tilePadding = getResources().getDimensionPixelSize(R.dimen.tile_padding);
        recyclerView.setPadding(tilePadding, tilePadding, tilePadding, tilePadding);
        recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
        return recyclerView;
        //return rootView
    }
    private void getFirebaseData() {
        myRef = mFirebaseDatabase.getReference("Users");
        myRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                ListItem data = dataSnapshot.getValue(ListItem.class);
                listItems.add(data);
                recyclerView.setAdapter(adapter);
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }
}
And heres my attempt to implement onclick inside recycler adapter :
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
    super(inflater.inflate(R.layout.category_item_tile, parent, false));
    username = itemView.findViewById(R.id.list_title);
    imageUrl = itemView.findViewById(R.id.list_avatar);
    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = v.getContext();
          Intent pDetail = new Intent(context, ProfileDetail.class);
            pDetail.putExtra(ProfileDetail.EXTRA_POSITION, getAdapterPosition());
           context.startActivity(pDetail);
        }
    });
}
And this is my detailactivity:
public class ProfileDetail extends AppCompatActivity {
    private static final String TAG = "EXTRA_POSITION";
    public static final String EXTRA_POSITION = "profile_detail";
    private List<ListItem> listItems;
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference myRef;
    private TextView tvName, tvSummary, tvStatus, tvDetail;
    private ImageView ivImage;
    private ImageView ivImageCard;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.categorydetails);
        listItems = new ArrayList<>();
        ivImage = findViewById(R.id.userAvatar);
        ivImageCard = findViewById(R.id.header_img);
        tvName = findViewById(R.id.userProfileName);
        tvSummary = findViewById(R.id.ProfileSummary);
        tvStatus = findViewById(R.id.userStatus);
        tvDetail = findViewById(R.id.ProfileDetail);
    }
}
This is the full code for the Adapter:
    public class CategoryRecycler extends RecyclerView.Adapter<CategoryRecycler.ViewHolder> {
    private List<ListItem> listItems;
    private Context context;
    public CategoryRecycler(List<ListItem>listItems,Context context) {
        this.listItems = listItems;
        this.context =context;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ListItem listItem = listItems.get(position);
        holder.username.setText(listItem.getUsername());
        //holder.summary.setText(listItem.getSummary());
        Picasso.with(context).load(listItem.getImageurl()).into(holder.imageUrl);
    }
    @Override
    public int getItemCount() {
        return listItems.size();
    }
public class ViewHolder extends RecyclerView.ViewHolder {
    public TextView username;
    public TextView summary;
    public ImageView imageUrl;
    public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
        super(inflater.inflate(R.layout.category_item_tile, parent, false));
        username = itemView.findViewById(R.id.list_title);
        imageUrl = itemView.findViewById(R.id.list_avatar);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = v.getContext();
              Intent pDetail = new Intent(context, ProfileDetail.class);
                pDetail.putExtra(ProfileDetail.EXTRA_POSITION, getAdapterPosition());
               context.startActivity(pDetail);
            }
        });
    }
}
}
onBindViewHolder holder calls:
holder.username.setText(listItem.getUsername());
Picasso.with(context).load(listItem.getImageurl()).into(holder.imageUrl);
context is required for my picasso image management.
//declaring context
private Context context;
//using context
this.context =context;
But if you know any other way without using context on image,i would appreciate the suggestions.
 
    