How To Start Activity From Recyclerview Adapter In Fragment
I can't click RecyclerView to a new Activity from RecyclerViewAdapter. I call ItemClick here. DayAdapter.java: holder.setItemClickListener(new ItemClickListener() { @Overri
Solution 1:
Pass contaxt to recyclerview adapter constructor like this
Context context;
MyAdapter(Context context, .....){
this.context=context;
}
Call Activity
context.startActivity(......);
Solution 2:
Though you can start Activity from Adapter class passing a Context but as Documented it's
- not a Good design pattern
- and also a Bad practice to follow.
I would rather suggest to have an interface defined in your Adapter class which would be implemented by the Fragment class. Fragment class initializes the Adapter passing it's reference which you would typeCast to interface like this
DayAdpater.class
publicclassDayAdapterextendsRecyclerView.Adapter<DayAdapter.ViewHolder> {
private OnActionListener mListener;
DayAdapter(OnActionListener listener){
this.mListener=listener;
}
holder.setItemClickListener(newItemClickListener() {
@OverridepublicvoidonClick(View view, int position, boolean isLongClick) {
mListener.startActivity(position);
}
});
interfaceOnActionListener{
publicvoidstartActivity(int position);
}
}
FragmentDay30.class
publicclassFragmentDay30extendsFragmentimplementsDayAdapter.OnActionListener{
@OverridepublicvoidonCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_30day, container,false);
RecyclerViewfragment30datRecyclerView= (RecyclerView) view.findViewById(R.id.fragment30dayRecyclerView);
LinearLayoutManagerlinearLayoutManager=newLinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
fragment30datRecyclerView.setLayoutManager(linearLayoutManager);
DayAdapterdayAdapter=newDayAdapter(getActivity(), this);
fragment30datRecyclerView.setAdapter(dayAdapter);
return view;
}
/**
* this is the place where you should start a new activity
*/publicvoidstartActivity(int position) {
//Intent openProgramActivity = new Intent(context, ProgramActivity.class);IntentopenProgramActivity=newIntent(getActivity(), ProgramActivity.class);
openProgramActivity.putExtra("index",position);
getActivity.startActivity(openProgramActivity);
}
}
This is how the your adpater class interacts with the fragment class.
Hope this helps.
Solution 3:
Pass context
in RecyclerView
adapter constructor which you are using for setAdapter
like this:
Context context;
MyCustomAdapter(Context context, .....){
this.context=context;
}
For call Activity used:
context.startActivity(......);
Post a Comment for "How To Start Activity From Recyclerview Adapter In Fragment"