我有一个带有类似按钮的行的cardview,我在适配器中设置了一个侦听器,用于处理该按钮中的事件。问题是,当我单击一行的like按钮时,其他行(不是全部)也会收到点击或类似的内容。例如,如果我单击行号1的“类似”按钮,则行号7也会显示为单击其按钮。
这是我的适配器:
public class InmuebleAdapter extends RecyclerView.Adapter<InmuebleAdapter.MyViewHolder> {
private List<Inmueble> inmueblesList;
private Context mContext;
static final int MIN_DISTANCE = 20;
private float x1, x2;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView precio, habitaciones, metros, baños, garajes, avenida, estado;
public ImageView image, fav;
public LinearLayout info;
public MyViewHolder(View view) {
super(view);
precio = (TextView) view.findViewById(R.id.precio);
habitaciones = (TextView) view.findViewById(R.id.habitaciones);
metros = (TextView) view.findViewById(R.id.metros);
baños = (TextView) view.findViewById(R.id.baños);
garajes = (TextView) view.findViewById(R.id.garajes);
avenida = (TextView) view.findViewById(R.id.avenida);
estado = (TextView) view.findViewById(R.id.estado);
image = (ImageView) view.findViewById(R.id.image);
fav = (ImageView) view.findViewById(R.id.fav);
info = (LinearLayout) view.findViewById(R.id.info);
}
}
public InmuebleAdapter(List<Inmueble> inmueblesList, Context context) {
this.inmueblesList = inmueblesList;
this.mContext = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.inmueble_row_item4, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Inmueble inmueble = inmueblesList.get(position);
holder.precio.setText("Ref. " + inmueble.getPrecio());
holder.habitaciones.setText(inmueble.getHabitaciones() + " habitaciones");
holder.metros.setText(inmueble.getMetrosCuadrados() + "m²");
holder.baños.setText(inmueble.getBaños() + " baños");
holder.garajes.setText(inmueble.getGarajes() + " garajes");
holder.avenida.setText(inmueble.getDireccion());
holder.estado.setText(inmueble.getCiudad() + ", " + inmueble.getEstado());
Glide.with(mContext)
.load(inmueble.getImgUrl())
.centerCrop()
.into(holder.image);
holder.fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFav(holder, position);
Toast.makeText(mContext, "Posicion: " + position, Toast.LENGTH_SHORT).show();
Toast.makeText(mContext, "Holder posicion: " + holder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
holder.image.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
layoutHideAnimation(holder, event, position);
return true;
}
});
}
@Override
public int getItemCount() {
return inmueblesList.size();
}
public void layoutHideAnimation(MyViewHolder holder, MotionEvent event, int position) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
float deltaX = x2 - x1;
if (Math.abs(deltaX) > MIN_DISTANCE) {
Toast.makeText(mContext, "Swipe", Toast.LENGTH_SHORT).show();
}
else {
if (inmueblesList.get(position).getInfoIsHide()) {
holder.info.animate().translationY(0).alpha(1.0f);
inmueblesList.get(position).setInfoIsHide(false);
} else {
holder.info.animate().translationY(holder.info.getHeight()).alpha(1.0f);
inmueblesList.get(position).setInfoIsHide(true);
}
}
break;
}
}
public void setFav(MyViewHolder holder, int position) {
if (inmueblesList.get(position).getLiked()) {
Glide.with(mContext)
.load(R.drawable.ic_favorite_border_white_24dp)
.into(holder.fav);
inmueblesList.get(position).setLiked(false);
} else {
Glide.with(mContext)
.load(R.drawable.ic_favorite_white_24dp)
.into(holder.fav);
inmueblesList.get(position).setLiked(true);
}
}
}
答案 0 :(得分:0)
在代码中添加几行
holder.setIsRecyclable(false);
onBindViewHolder
inmueblesList.get(position).setLiked(true);
时与此相似
读取喜欢图像的状态,比如您阅读文本并将其设置为textview的。