Для нажатия на указанный c элемент в Recycler View требуется два щелчка мышью. - PullRequest
0 голосов
/ 04 августа 2020

Я создавал Recyclerview для своего приложения электронной коммерции, в котором после нажатия кнопки «Добавить в корзину» макет кнопки должен быть изменен на другой макет (некоторый макет, содержащий текст «Добавлено в корзину»). Я знаю, как это сделать, но когда я нажимаю кнопку «Добавить в корзину», макет меняется только тогда, когда я нажимаю на нее ДВА РАЗ. Пожалуйста, помогите.

Вот код, который я написал в Viewholder:

public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView mproducttext;
        public TextView mpricetext;
        public ImageView mimageview;
        public ImageView mcarticon;
        boolean isincart=false;
       
        public ViewHolder(final View itemView) {
            super(itemView);

            mproducttext = itemView.findViewById(R.id.productnametext);
            mpricetext = itemView.findViewById(R.id.pricetext);
            mimageview=itemView.findViewById(R.id.productimageview);
            mcarticon=itemView.findViewById(R.id.addtocarticon);
            mcarticon.setBackgroundResource(R.drawable.addtocarticon);
            mcarticon.setOnClickListener(mTogglePlayButton);


            mimageview.setOnClickListener(new View.OnClickListener() {


                @Override
                public void onClick(View v) {

                    int position = getAdapterPosition();
                    ProductResult mProductResult= mArraylist.get(position);

                    String productname= mProductResult.getProductname();
                    String price=mProductResult.getPrice();
                    String imageurl=mProductResult.getImageurl();

                    Intent intent=new Intent(mcontext,Description.class);
                    intent.putExtra("productname",productname);
                    intent.putExtra("price",price);
                    intent.putExtra("imageurl",imageurl);
                    mcontext.startActivity(intent);


                   

                }
            });



        }

        View.OnClickListener mTogglePlayButton = new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if(isincart){
                    v.setBackgroundResource(R.drawable.addedtocarticon);
                }else{
                    v.setBackgroundResource(R.drawable.addtocarticon);
                }

                isincart = !isincart; // reverse
            }
        };
    }

1 Ответ

0 голосов
/ 04 августа 2020

Мне кажется, это потому, что вы сначала проверяете, есть ли isincart, а затем меняете значение переменной. Попробуйте инвертировать это, например:

View.OnClickListener mTogglePlayButton = new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        isincart = !isincart; // reverse

        if(isincart){
            v.setBackgroundResource(R.drawable.addedtocarticon);
        }else{
            v.setBackgroundResource(R.drawable.addtocarticon);
        }
    }
};
...