Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo obtener un contexto en un adaptador de vista de reciclador

Estoy tratando de utilizar la biblioteca picasso para poder cargar url a imageView, pero no soy capaz de obtener el context para utilizar la biblioteca picasso correctamente.

 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(); } } 

8 Solutions collect form web for “Cómo obtener un contexto en un adaptador de vista de reciclador”

Usted tiene algunas opciones aquí:

  1. Pasar Context como un argumento a FeedAdapter y mantenerlo como campo de clase
  2. Utilice la inyección de la dependencia para inyectar el Context cuando usted lo necesita. Recomiendo fuertemente la lectura sobre él. Hay una gran herramienta para eso – Dagger by Square
  3. Obtenerlo desde cualquier objeto de View . En su caso esto podría funcionar para usted:

    holder.pub_image.getContext()

    Como pub_image es un ImageView .

Puede agregar variables globales:

 private Context context; 

Luego asigne el contexto desde aquí:

 @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; } 

Codding feliz 🙂

Puede utilizar el contexto holder.pub_image.getContext() ):

 @Override public void onBindViewHolder(ViewHolder ViewHolder, int position) { holder.txtHeader.setText(mDataset.get(position).getPost_text()); Picasso.with(holder.pub_image.getContext()).load("http://i.imgur.com/DvpvklR.png").into(holder.pub_image); } 

Puede utilizar como este view.getContext ()

Ejemplo

 holder.tv_room_name.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), "", Toast.LENGTH_SHORT).show(); } }); 

Primero declara globalmente

Context mContext;

Pasar el contexto con el constructor, modificándolo.

 public FeedAdapter(List<Post> myDataset, Context context) { mDataset = myDataset; this.mContext = context; } 

Entonces use el mContext que lo necesite

Crear un constructor de FeedAdapter:

 Context context; //global public FeedAdapter(Context context) { this.context = context; } 

Y en Actividad

 FeedAdapter obj = new FeedAdapter(this); 

Primero agregue una variable global

 Context mContext; 

A continuación, cambie su constructor a este

 public FeedAdapter(Context context, List<Post> myDataset) { mContext = context; mDataset = myDataset; } 

El paso de su contexto al crear el adaptador.

 FeedAdapter myAdapter = new FeedAdapter(this,myDataset); 

Usted puede utilizar esto:

 itemView.getContext() 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.