Load a fragment on clicking CardView from RecyclerView

13,170

Solution 1

A simple implementation is to add a onClickListener() to the ViewHolder 's itemView in the constructor of the Adapter.

    public MyViewHolder(View view) {
        super(view);

        itemView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){

                AppCompatActivity activity = (AppCompatActivity) view.getContext();
                Fragment myFragment = new MyFragment();
                activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();


            }
        });
    }

Solution 2

I'm not able to do that with FragmentManager or SupportFragmentManager

That's because RecyclerViewAdapter doesn't hold a reference to the FragmentManager. You should communicate to the Activity/Fragment hosting the RecyclerView, that the event occurred and from there you start the fragment. To do so check my answer here

Share:
13,170

Related videos on Youtube

priyank
Author by

priyank

A passionate coder with profound experience in Android Application Development.

Updated on September 14, 2022

Comments

  • priyank
    priyank over 1 year

    I've a RecyclerView and CardView inside it. Now what i want to do is load a simple Fragment on clicking the CardView. I'm not able to do that with FragmentManager or SupportFragmentManager. Please give me some directions.

    My RecyclerViewAdapder and ViewHolder are ..

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
        private String[] eventName;
        private String[] eventBrief;
    
        public static class ViewHolder extends RecyclerView.ViewHolder {
    
            public TextView textViewName, textViewBrief;
            public CardView cardView;
    
            public ViewHolder(View v) {
                super(v);
    
                textViewName = (TextView)v.findViewById(R.id.textViewName);
                textViewBrief = (TextView)v.findViewById(R.id.textViewBrief);
                final Context context = v.getContext();
                cardView = (CardView)v.findViewById(R.id.card_view);
    
                cardView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        EventFragment eventFragment = EventFragment.newInstance();
                        // Load and view eventFragment here??
                    }
                });
            }
        }
    
        public RecyclerViewAdapter(String[] eventName, String[] eventBrief) {
            this.eventName = eventName;
            this.eventBrief = eventBrief;
    
        }
    
        @Override
        public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.my_card_view, parent, false);
            return new ViewHolder(v);
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            holder.textViewName.setText(eventName[position]);
            holder.textViewBrief.setText(eventBrief[position]);
        }
    
        @Override
        public int getItemCount() {
            return eventName.length;
        }
    }
    
  • sabbibJAVA
    sabbibJAVA about 7 years
    @martiendt @viper what is Fragment myFragment = new MyFragment(); ?
  • viper
    viper about 7 years
    MyFragment is the fragment class of the fragment that you want to load @sabbibJAVA
  • martiendt
    martiendt about 7 years