How to get a context in a recycler view adapter
Edit As solidak said in the comments section, the original answer could lead to memory leak issues, and it's a bad practice to use this method, so it's better to use another method to access the context.
Original answer:
You can add a global variable:
private Context context;
then assign the context from here:
@Override
public FeedAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
// create a new view
View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.feedholder, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
// set the Context here
context = parent.getContext();
return vh;
}
Happy Codding :)
You have a few options here:
- Pass
Context
as an argument to FeedAdapter and keep it as class field - Use dependency injection to inject
Context
when you need it. I strongly suggest reading about it. There is a great tool for that -- Dagger by Square Get it from any
View
object. In your case this might work for you:holder.pub_image.getContext()
As
pub_image
is aImageView
.
Short answer:
Context context;
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
context = recyclerView.getContext();
}
Explanation why other answers are not great:
- Passing
Context
to the adapter is completely unnecessary, sinceRecyclerView
you can access it from inside the class - Obtaining
Context
atViewHolder
level means that you do it every time you bind or create aViewHolder
. You duplicate operations. - I don't think you need to worry about any memory leak. If your adapter lingers outside your
Activity
lifespan (which would be weird) then you already have a leak.