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); }
}
- RecyclerView.Adapter.notifyItemChanged () nunca pasa la carga útil a onBindViewHolder ()
- Recyclerview addOnItemTouchListener obtiene la vista previa que se hace clic en la fila
- ¿Cómo usar RecyclerView de acuerdo con la pantalla del dispositivo?
- Recyclerview con el interior scrollview anidado?
- Desplazamiento horizontal y vertical en la vista del reciclador android
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
- Recycleview en el conjunto de coordenadas
- RecyclerView para la aplicación de chat
- Animación de desplazamiento de la lista de Android
- Cómo obtener Adview debajo de Viewpager en CoordinatorLayout
- Adaptador RecyclerView que muestra imágenes incorrectas
- Android RecyclerView encontrar la primera y última vista en ItemDecoration
- ¿Cómo paso una carga útil a RecyclerView.Adapter.notifyItemChanged?
- RecyclerView y Data Binding no funcionan
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);
- Informe Leakcanary de pérdida de memoria usando Otto
- Botón de Android con color de fondo y efecto Ripple