Cómo cambiar la imagen en particular en la vista del reciclador después de hacer clic

Quiero cambiar la imagen respectiva del elemento seleccionado en la vista del reciclador. Ahora lo que está pasando es que si hago clic en el elemento 2 la imagen está cambiando al azar posición del artículo en la lista

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.DataObjectHolder> { private static String LOG_TAG = "MyRecyclerViewAdapter"; private ArrayList<CRMbean> mDataset; private static MyClickListener myClickListener; static Context mContext; private List<String> mtList ; public MyRecyclerViewAdapter(List<String> filteredList, CRMactivity crMactivity) { mtList = filteredList; } public static class DataObjectHolder extends RecyclerView.ViewHolder implements View .OnClickListener { public static ImageView testImage; TextView name; TextView regId; TextView roomNo; public DataObjectHolder(View itemView) { super(itemView); name = (TextView) itemView.findViewById(R.id.name); regId = (TextView)itemView.findViewById(R.id.reg_id); roomNo = (TextView)itemView.findViewById(R.id.roomno); testImage = (ImageView)itemView.findViewById(R.id.logo); Log.i(LOG_TAG, "Adding Listener"); itemView.setOnClickListener(this); } @Override public void onClick(View v) { myClickListener.onItemClick(getAdapterPosition(), v); } } public void setOnItemClickListener(MyClickListener myClickListener) { MyRecyclerViewAdapter.myClickListener = myClickListener; } public MyRecyclerViewAdapter(ArrayList<CRMbean> myDataset) { mDataset = myDataset; } @Override public MyRecyclerViewAdapter.DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.card_view_row, parent, false); DataObjectHolder dataObjectHolder = new DataObjectHolder(view); return dataObjectHolder; } @Override public void onBindViewHolder(MyRecyclerViewAdapter.DataObjectHolder holder, int position) { holder.name.setText(mDataset.get(position).getName()); holder.regId.setText(mDataset.get(position).getRegId()); holder.roomNo.setText(mDataset.get(position).getRoomNo()); } public void addItem(CRMbean dataObj, int index) { mDataset.add(index, dataObj); notifyItemInserted(index); } public void deleteItem(int index) { mDataset.remove(index); notifyItemRemoved(index); } @Override public int getItemCount() { return mDataset.size(); } public interface MyClickListener { void onItemClick(int position, View v); } 

}

lo anterior es para adpater de recyclerview

  ((MyRecyclerViewAdapter) mAdapter).setOnItemClickListener (new MyRecyclerViewAdapter.MyClickListener() { @Override public void onItemClick(int position, View v) { Log.i(LOG_TAG, " Clicked on Item " + position); MyRecyclerViewAdapter.DataObjectHolder.testImage.setImageResource(R.drawable.video_icon_fill); //getInformation(position); } }); 

el código anterior es para OnclickListener

prueba esto,

 class CRMbean{ public boolean isImageChanged; public boolean isImageChanged() { return isImageChanged; } public void setImageChanged(boolean imageChanged) { isImageChanged = imageChanged; } } 

En BindHolder hazlo como,

 @Override public void onBindViewHolder(MyRecyclerViewAdapter.DataObjectHolder holder, int position) { holder.name.setText(mDataset.get(position).getName()); holder.regId.setText(mDataset.get(position).getRegId()); holder.roomNo.setText(mDataset.get(position).getRoomNo()); if(mDataset.get(position).isImageChanged()){ holder.testImage.setImageResource(R.drawable.video_icon_fill); }else{ holder.testImage.setImageResource("You Default Image"); } } 

en el adaptador escriba este método

 public void changeImage(int index) { mDataset.get(position).setImageChanged(true); notifyItemChanged(index) } 

En el artículo haga clic en Recyleview

  (MyRecyclerViewAdapter) mAdapter).setOnItemClickListener (new MyRecyclerViewAdapter.MyClickListener() { @Override public void onItemClick(int position, View v) { Log.i(LOG_TAG, " Clicked on Item " + position); MyRecyclerViewAdapter.changeImage(position); } }); 

Cambie el valor de la imagen en el objeto en la posición de clic y llame a notifyItemChanged(position) También maneje el cambio de imagen en el Bindviewholder(ViewHolder holder,position) del adaptador.

en onBindViewHolder añada el siguiente código:

testImage.setTag (titular);

luego, en onClick añadir este código para cambiar la imagen:

 MyRecyclerViewAdapter.DataObjectHolder yourHolderObj = (MyRecyclerViewAdapter.DataObjectHolder)((ImageView)itemView.findViewById(R.id.logo)).getTag(); yourHolderObj.testImage.setImageResource(R.drawable.video_icon_fill); 
  • Error: no se puede encontrar la clase de símbolo RecyclerView
  • Los elementos de RecyclerView cambian de tamaño después de la actualización
  • Establecer contentInset en RecyclerView
  • Aumenta la escala del elemento en RecyclerView para superponer 2 elementos adyacentes.
  • ¿Qué es el ciclo de vida del adaptador RecyclerView?
  • ¿Cómo configuro las RecyclerViews anidadas mientras permanezco en funcionamiento?
  • Clic en el elemento programáticamente en RecyclerView
  • RecyclerView sin barra de desplazamiento cuando se desactiva el desplazamiento excesivo
  • OnClick en el EditText dentro de TextInputLayout, dentro de un RecyclerView
  • RecyclerView.ViewHolder - getLayoutPosition vs getAdapterPosition
  • ¿Cuál es la mejor manera de hacer el elemento superpuesto en RecyclerView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.