J'essaie d'utiliser la bibliothèque Picasso pour pouvoir charger l'URL dans imageView, mais je ne suis pas en mesure d'obtenir le context
pour utiliser correctement la bibliothèque Picasso.
public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder> {
private List<Post> mDataset;
// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView txtHeader;
public ImageView pub_image;
public ViewHolder(View v) {
super(v);
txtHeader = (TextView) v.findViewById(R.id.firstline);
pub_image = (ImageView) v.findViewById(R.id.imageView);
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public FeedAdapter(List<Post> myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@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);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.txtHeader.setText(mDataset.get(position).getPost_text());
Picasso.with(this.context).load("http://i.imgur.com/DvpvklR.png").into(holder.pub_image);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.size();
}
}
java
android
android-recyclerview
picasso
android-context
Étranger B.
la source
la source
ApplicationContext
et non lié à l'activité, ce qui entraînera un crash d'exécution à partir de Glide.Vous pouvez ajouter une variable globale:
puis attribuez le contexte à partir d'ici:
Bon codding :)
la source
onDetachedFromRecyclerView
ou quelque chose.Réponse courte:
Explication pourquoi les autres réponses ne sont pas géniales:
Context
à l'adaptateur est totalement inutile, carRecyclerView
vous pouvez y accéder depuis l'intérieur de la classeContext
auViewHolder
niveau signifie que vous le faites chaque fois que vous liez ou créez unViewHolder
. Vous dupliquez des opérations.Activity
durée de vie (ce qui serait étrange), vous avez déjà une fuite.la source
onDetachedFromRecyclerView()
et libérer le contexte?Vous pouvez utiliser pub_image context (
holder.pub_image.getContext()
):la source
Vous pouvez définir:
Et lors de l'
onCreate
initialisationctx
sur:Remarque: Parent est un ViewGroup.
la source
Première déclaration mondiale
Context mContext;
passer le contexte au constructeur, en le modifiant.
puis utilisez le
mContext
partout où vous en avez besoinla source
Vous pouvez utiliser comme ceci view.getContext ()
Exemple
la source
vous pouvez utiliser ceci:
la source
Créez un constructeur de FeedAdapter:
et en activité
la source
Ajoutez d'abord une variable globale
Puis changez votre constructeur en ceci
Passez votre contexte lors de la création de l'adaptateur.
la source
la source