Привет Друзья у меня есть проблема он делает очень пожалуйста помогите мне, они будут видеть у меня есть проблема в момент называния кнопки внутри onBindViewHolder, Случается, что, когда я это выбираю, автоматически выбирается другая кнопка, загрузив RecyclerView. Это мой код:
public class ProductoAdapter extends RecyclerView. Adapter {
private View.OnClickListener listener;
private Context context;
private List list;
public ProductoAdapter(Context context, List list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View vista = LayoutInflater.from( context ).inflate( R.layout.item_productos, parent, false );
return new AndroidViewHolder( vista );
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
final AndroidViewHolder viewHolder = (AndroidViewHolder) holder;
final Producto item = list.get( position );
viewHolder.txtpro.setText( item.getProductoNombre() );
viewHolder.txtveces.setText( item.getPrecio() );
viewHolder.txtcod.setText( item.getCodigoProducto() );
Glide.with( context ).load( item.getFoto() ).into( viewHolder.img );
viewHolder.BtnDelete.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.BtnDelete.setText( "AÑADIDO" );
viewHolder.BtnDelete.setTextColor( Color.parseColor( "#ffffff" ) );
viewHolder.BtnDelete.setBackgroundColor( Color.parseColor( "#FF0000" ) );
}
} );
}
@Override
public int getItemCount() {
return list.size();
}
class AndroidViewHolder extends RecyclerView.ViewHolder {
public TextView txtcod, txtpro, txtveces;
;
Button BtnDelete , BtnSecundario;
public ImageView img;
LinearLayout contenedor;
public AndroidViewHolder(View itemView) {
super( itemView );
txtpro = (TextView) itemView.findViewById( R.id.TxtNombrePro );
txtcod = (TextView) itemView.findViewById( R.id.TxtCodigoPro );
txtveces = (TextView) itemView.findViewById( R.id.TxtVencesComp );
BtnDelete = (Button) itemView.findViewById( R.id.addButton );
BtnSecundario = (Button)itemView.findViewById( R.id.BtnSecundario );
img = (ImageView) (itemView.findViewById( R.id.ImFoto ));
contenedor = (LinearLayout) itemView.findViewById( R.id.contenedor_card );
}
}
Пример, Я Выбираю Этот Продукт
И загрузив RecyclerView
Автоматически выбирается эта кнопка
Помогите мне пожалуйста :D
Ты нуждаешься в том, чтобы разместить эти 2 mГ©todos в adapter для того, чтобы он стабилизировал положения в течение scroll:
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
и в activity/fragment не забывай разместить:
tuAdapter.setHasStableIds(true);
Я предлагаю тебе добавить другое свойство к твоему объекту Producto
, например seleccionado
, где ты будешь хранить состояние продукта:
public class Producto {
private int seleccionado;
public int getSeleccionado() {
return seleccionado;
}
public void setSeleccionado(int seleccionado) {
this.seleccionado = seleccionado;
}
...
...
...
}
из этой формы ты определил бы свойство:
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
final AndroidViewHolder viewHolder = (AndroidViewHolder) holder;
final Producto item = list.get( position );
viewHolder.txtpro.setText( item.getProductoNombre() );
viewHolder.txtveces.setText( item.getPrecio() );
viewHolder.txtcod.setText( item.getCodigoProducto() );
Glide.with( context ).load( item.getFoto() ).into( viewHolder.img );
if(item.getSeleccionado() == 1){
viewHolder.BtnDelete.setText( "AÑADIDO" );
viewHolder.BtnDelete.setTextColor( Color.parseColor( "#ffffff" ) );
viewHolder.BtnDelete.setBackgroundColor( Color.parseColor( "#FF0000" ) );
}
viewHolder.BtnDelete.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
//Define propiedad seleccionado.
item.setSeleccionado(1);
}
} );
}