Load a fragment on clicking CardView from RecyclerView
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
Related videos on Youtube
priyank
A passionate coder with profound experience in Android Application Development.
Updated on September 14, 2022Comments
-
priyank over 1 year
I've a
RecyclerView
andCardView
inside it. Now what i want to do is load a simpleFragment
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 about 7 years@martiendt @viper what is
Fragment myFragment = new MyFragment();
? -
viper about 7 years
MyFragment
is the fragment class of the fragment that you want to load @sabbibJAVA -
martiendt about 7 years@sabbibJAVA you can see my implementation here github.com/martiendt/daily-dhamma i used this on github.com/martiendt/daily-dhamma/blob/master/app/src/main/java/…