Удалить эту строку
image = viewHolder.view.findViewById(R.id.imagen);
И когда вы используете setImageBitmap
доступ к image
, как это
viewHolder.image.setImageBitmap(yourImage);
EDIT:
В вашем onBindViewHolder
происходит много вещей, и вы раздуваете свои взгляды (findViewById
) в разных местах. Вся эта работа должна быть перенесена на ViewHolder
, с которой будет намного легче управлять.
Прежде всего, у вас есть эта строка дважды image = viewHolder.view.findViewById(R.id.imagen);
, вам не нужно это делать, вам нужно сделать это только один раз, сделать это один раз в конструкторе ViewHolder
и все.
Также эта строка ImageView mostrarImagen=(ImageView)viewHolder.view.findViewById(R.id.mostrarImagen2);
лучше в вашем конструкторе ViewHolder
, а не в onBindViewHolder
.
После этого удалите View view
из вашего ViewHolder
и удалите эту строку и из конструктора view = itemView;
, в этом нет необходимости.
Теперь ваш ViewHolder
конструктор и объявление должны выглядеть примерно так:
public ImageButton image;
public ImageView mostrarImagen
public ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagen);
mostrarImagen = itemView.findViewById(R.id.mostrarImagen2);
}
А когда вы используете ImageButton
и ImageView
в onBindViewHolder
, не делайте findViewById
, просто используйте viewHolder.image
и viewHolder.mostrarImagen
.
Что касается ваших onClickListener
и onLongClickListener
, поместите их в класс ViewHolder
, это намного чище. Поместите эти строки в ваш ViewHolder
конструктор:
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
Кроме того, убедитесь, что ваш ViewHolder
реализует onClickListener
следующим образом:
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener
А затем в вашем ViewHolder
переопределении класса onClickListener
и onLongClickListener
:
@Override
public void onClick(View view) {
// your code
}
@Override
public boolean onLongClick(View view) {
// your code
return true;
}