Кнопка внутри onBindViewHolder

Привет Друзья у меня есть проблема он делает очень пожалуйста помогите мне, они будут видеть у меня есть проблема в момент называния кнопки внутри 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 );
        }
    }

Пример, Я Выбираю Этот Продукт

introducir la descripción de la imagen aquí }

И загрузив RecyclerView

introducir la descripción de la imagen aquí

Автоматически выбирается эта кнопка

Помогите мне пожалуйста :D

1
задан 19.03.2019, 02:07
2 ответа

Ты нуждаешься в том, чтобы разместить эти 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);
1
ответ дан 02.12.2019, 05:28

Я предлагаю тебе добавить другое свойство к твоему объекту 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);

            }
        } );

}
0
ответ дан 02.12.2019, 05:28