'Changing single row affecting multiple rows randomly multiple rows in Recyclerview in android?

I am creating a ecommerce application. In which I am managing Cart screen.

The cart screen is included in HomeFragment's layout. From the adapter I am calling interface to transfer the data and update to the cart screen which appears when the cart value is greater than -> 0.

The problem is that when I click on "Add to cart" button of any item from recyclerview the "Add to cart" disappers and counter layout appears. as shown in the below images.

Clicking on single item ther other rows's "Add to cart" button disappears which must be not disapper. It is affecting multiple rows on single row change.

How to solve that issue any solution from your side?

HomeFragment.java

            package com.example.rangeela_cart.Fragments;
        
        import android.content.Intent;
        import android.os.Bundle;
        
        import androidx.databinding.DataBindingUtil;
        import androidx.fragment.app.Fragment;
        import androidx.recyclerview.widget.DefaultItemAnimator;
        import androidx.recyclerview.widget.LinearLayoutManager;
        import androidx.recyclerview.widget.LinearSnapHelper;
        import androidx.recyclerview.widget.RecyclerView;
        import androidx.recyclerview.widget.SnapHelper;
        
        import android.util.Log;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        
        import com.example.rangeela_cart.Activity.CartActivity;
        import com.example.rangeela_cart.Adapter.HomeFragImageSliderAdapter;
        import com.example.rangeela_cart.Adapter.HomeFragLatestProAdapter;
        import com.example.rangeela_cart.Adapter.HomeFragPopularProAdapter;
        import com.example.rangeela_cart.R;
        import com.example.rangeela_cart.databinding.ActivityCartBinding;
        import com.example.rangeela_cart.databinding.FragmentHomeBinding;
        import com.example.rangeela_cart.models.HomeFragImageSliderModel;
        import com.example.rangeela_cart.models.HomeFragLatestProModel;
        import com.example.rangeela_cart.models.HomePopularProModel;
        import com.smarteist.autoimageslider.IndicatorView.animation.type.IndicatorAnimationType;
        import com.smarteist.autoimageslider.SliderView;
        
        import java.util.ArrayList;
        import java.util.List;
        
        public class HomeFragment extends Fragment {
            private View view;
            public FragmentHomeBinding binding;
            private List<HomeFragImageSliderModel> imageSliderModelList = new ArrayList<>();
            private HomeFragImageSliderAdapter adapter;
            private List<HomePopularProModel> homePopularProModelList = new ArrayList<>();
            private HomeFragPopularProAdapter homeFragPopularProAdapter;
            private List<HomeFragLatestProModel> homeFragLatestProModelList = new ArrayList<>();
            private HomeFragLatestProAdapter latestProAdapter;
            int val = 0;
            int counter;
            ActivityCartBinding activity_cart;
        
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                // Inflate the layout for this fragment
                binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
                view = binding.getRoot();
                intiView();
                return view;
        
            }
        
            private void intiView() {
                activity_cart = binding.layoutCart;
                setCustomImage();
                setPopularProducts();
                setLatestPro();
                binding.textLatest.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        startActivity(new Intent(getContext(), CartActivity.class).putExtra("value", "200"));
        
                    }
                });
                loadCart();
            }
        
            private void setCustomImage() {
                HomeFragImageSliderModel model1 = new HomeFragImageSliderModel("https://5.imimg.com/data5/NJ/DW/YW/SELLER-8673553/namkeen-packaging-pouch-500x500.jpg", "1");
                imageSliderModelList.add(model1);
        
                HomeFragImageSliderModel model2 = new HomeFragImageSliderModel("https://5.imimg.com/data5/AV/FR/QL/SELLER-9988068/laminated-namkeen-packaging-packet-500x500.jpg", "2");
                imageSliderModelList.add(model2);
        
                HomeFragImageSliderModel model3 = new HomeFragImageSliderModel("https://thumbs.dreamstime.com/b/new-delhi-india-november-packets-chips-indian-brand-haldirams-packaged-food-182551372.jpg", "3");
                imageSliderModelList.add(model3);
        
                HomeFragImageSliderModel model4 = new HomeFragImageSliderModel("https://vinayakfoodsgroup.com/indian-ready-to-eat/wp-content/uploads/2019/07/delicious-healthy-breakfast2-4.jpg", "4");
                imageSliderModelList.add(model4);
        
                adapter = new HomeFragImageSliderAdapter(getActivity(), imageSliderModelList);
                binding.autoImageSlider.startAutoCycle();
                binding.autoImageSlider.setAutoCycle(true);
                binding.autoImageSlider.setIndicatorAnimation(IndicatorAnimationType.WORM);
                binding.autoImageSlider.setAutoCycleDirection(SliderView.AUTO_CYCLE_DIRECTION_BACK_AND_FORTH);
                binding.autoImageSlider.setScrollTimeInSec(3);
                binding.autoImageSlider.setSliderAdapter(adapter);
            }
        
            private void setPopularProducts() {
                HomePopularProModel model1 = new HomePopularProModel("T-Shirt", "https://png.pngtree.com/element_our/20190531/ourmid/pngtree-red-cartoon-t-shirt-image_1297508.jpg", "Available", "300", "RN Cart");
                homePopularProModelList.add(model1);
        
                HomePopularProModel model2 = new HomePopularProModel("T-Shirt", "https://png.pngtree.com/element_our/20190531/ourmid/pngtree-red-cartoon-t-shirt-image_1297508.jpg", "Available", "200", "RN Cart");
                homePopularProModelList.add(model2);
        
                HomePopularProModel model3 = new HomePopularProModel("T-Shirt", "https://png.pngtree.com/element_our/20190531/ourmid/pngtree-red-cartoon-t-shirt-image_1297508.jpg", "Available", "100", "RN Cart");
                homePopularProModelList.add(model3);
        
                HomePopularProModel model4 = new HomePopularProModel("T-Shirt", "https://png.pngtree.com/element_our/20190531/ourmid/pngtree-red-cartoon-t-shirt-image_1297508.jpg", "Available", "50", "RN Cart");
                homePopularProModelList.add(model4);
        
                homeFragPopularProAdapter = new HomeFragPopularProAdapter(getActivity(), homePopularProModelList);
                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
                SnapHelper startSnapHelper = new LinearSnapHelper();
                startSnapHelper.attachToRecyclerView(binding.recyclerviewPopular);
                binding.recyclerviewPopular.setLayoutManager(layoutManager);
                binding.recyclerviewPopular.setItemAnimator(new DefaultItemAnimator());
                binding.recyclerviewPopular.setAdapter(homeFragPopularProAdapter);
                homeFragPopularProAdapter.setOnItemClickListner(new HomeFragPopularProAdapter.onItemClickListner() {
                    @Override
                    public void onClick(HomePopularProModel list) {
                        val = Integer.parseInt(list.getPro_price());
                        counter += val;
                        loadCart();
                    }
        
                    @Override
                    public void onCounterClick(HomePopularProModel listCounter,  String from) {
                        if (from == "add"){
                            counter += Integer.parseInt(listCounter.getPro_price());
                            loadCart();
                        }else{
                            counter -= Integer.parseInt(listCounter.getPro_price());
                            loadCart();
                        }
                    }
                });
            }
        
            private void setLatestPro() {
                HomeFragLatestProModel model = new HomeFragLatestProModel(
                        "https://5.imimg.com/data5/NJ/DW/YW/SELLER-8673553/namkeen-packaging-pouch-500x500.jpg",
                        "Namkeen", "500gm", "Rs.350");
                homeFragLatestProModelList.add(model);
        
                HomeFragLatestProModel model2 = new HomeFragLatestProModel(
                        "https://5.imimg.com/data5/AV/FR/QL/SELLER-9988068/laminated-namkeen-packaging-packet-500x500.jpg",
                        "Sona Namkeen", "250gm", "Rs.100");
                homeFragLatestProModelList.add(model2);
        
                HomeFragLatestProModel model3 = new HomeFragLatestProModel(
                        "https://thumbs.dreamstime.com/b/new-delhi-india-november-packets-chips-indian-brand-haldirams-packaged-food-182551372.jpg",
                        "Chips", "500gm", "Rs.80");
                homeFragLatestProModelList.add(model3);
        
                HomeFragLatestProModel model4 = new HomeFragLatestProModel(
                        "https://thumbs.dreamstime.com/b/packets-popular-brands-snack-food-poznan-poland-jun-packets-popular-brands-snack-food-including-lays-crunchips-120285289.jpg",
                        "Lays", "100", "Rs.40");
                homeFragLatestProModelList.add(model4);
        
                HomeFragLatestProModel model5 = new HomeFragLatestProModel(
                        "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F38%2F2015%2F06%2F12233316%2FMichael-Angelo-Meal-Starter-Chicken-Bruschetta.jpg",
                        "Chicken Masala", "500gm", "Rs.400");
                homeFragLatestProModelList.add(model5);
        
                HomeFragLatestProModel model6 = new HomeFragLatestProModel(
                        "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F38%2F2015%2F06%2F12233316%2FMichael-Angelo-Meal-Starter-Chicken-Bruschetta.jpg",
                        "Dry Food", "500gm", "Rs.550");
                homeFragLatestProModelList.add(model6);
                setDataToLatestRecycler(homeFragLatestProModelList);
            }
        
            private void setDataToLatestRecycler(List<HomeFragLatestProModel> latestProModelList) {
                latestProAdapter = new HomeFragLatestProAdapter(getActivity(), latestProModelList);
                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
                binding.recyclerviewLatest.setLayoutManager(layoutManager);
                binding.recyclerviewLatest.setItemAnimator(new DefaultItemAnimator());
                binding.recyclerviewLatest.setAdapter(latestProAdapter);
            }
        
            public void loadCart() {
                activity_cart.cartValue.setText(String.valueOf(counter));
                if (counter > 0) {
                    binding.layoutCart.getRoot().setVisibility(View.VISIBLE);
                } else {
                    binding.layoutCart.getRoot().setVisibility(View.GONE);
                }
            }
        }

Adapter class

                package com.example.rangeela_cart.Adapter;
            
            import android.content.Context;
            import android.util.Log;
            import android.view.LayoutInflater;
            import android.view.View;
            import android.view.ViewGroup;
            
            import androidx.annotation.NonNull;
            import androidx.databinding.DataBindingUtil;
            import androidx.recyclerview.widget.RecyclerView;
            
            import com.bumptech.glide.Glide;
            import com.example.rangeela_cart.R;
            
            import com.example.rangeela_cart.databinding.ItemHomePopularProBinding;
            import com.example.rangeela_cart.models.HomePopularProModel;
            
            import java.util.List;
            
            public class HomeFragPopularProAdapter extends RecyclerView.Adapter<HomeFragPopularProAdapter.myViewHolder> {
                private Context context;
                private List<HomePopularProModel> list;
                int productSelectedNumber = 0;
            
                public HomeFragPopularProAdapter(Context context, List<HomePopularProModel> list) {
                    this.context = context;
                    this.list = list;
                }
            
                @NonNull
                @Override
                public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    ItemHomePopularProBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_home_popular_pro, parent, false);
                    return new myViewHolder(binding);
                }
            
                @Override
                public void onBindViewHolder(@NonNull myViewHolder holder, int position) {
                    HomePopularProModel model = list.get(position);
                    Glide.with(context).load(model.getPro_image_url()).into(holder.binding.imagePopProduct);
                    holder.binding.textAvailability.setText(model.getPro_availability());
                    holder.binding.textCompanyName.setText(model.getPro_company_name());
                    holder.binding.textPopProductPrice.setText(model.getPro_price());
                    Log.e("initial counter " , String.valueOf(productSelectedNumber));
                    if (productSelectedNumber == 0) {
                        holder.binding.iconReduce.setEnabled(false);
                        holder.binding.layoutAddToCart.setVisibility(View.VISIBLE);
                        holder.binding.layoutCounter.setVisibility(View.GONE);
                    } else {
                        holder.binding.iconReduce.setEnabled(true);
                        holder.binding.layoutAddToCart.setVisibility(View.GONE);
                        holder.binding.layoutCounter.setVisibility(View.VISIBLE);
                    }
            
                    holder.binding.iconAdd.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Log.e("added value ", String.valueOf(productSelectedNumber));
                            holder.binding.iconReduce.setEnabled(true);
                            productSelectedNumber += 1;
                            holder.binding.textCounterValue.setText(String.valueOf(productSelectedNumber));
                            onItemClickListner.onCounterClick(model, "add");
            //                notifyDataSetChanged();
                        }
                    });
            
                    holder.binding.iconReduce.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Log.e("reduce value = ", String.valueOf(productSelectedNumber));
                            if (productSelectedNumber != 0) {
                                productSelectedNumber = productSelectedNumber - 1;
                                holder.binding.textCounterValue.setText(String.valueOf(productSelectedNumber));
                            }else{
                                holder.binding.layoutAddToCart.setVisibility(View.VISIBLE);
                                holder.binding.layoutCounter.setVisibility(View.GONE);
                            }
                            onItemClickListner.onCounterClick(model, "reduce");
            //                notifyDataSetChanged();
                        }
                    });
            
                    holder.binding.layoutAddToCart.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            productSelectedNumber = 1;
                            holder.binding.textCounterValue.setText(String.valueOf(productSelectedNumber));
                            onItemClickListner.onClick(model);
                            holder.binding.layoutAddToCart.setVisibility(View.GONE);
                            holder.binding.layoutCounter.setVisibility(View.VISIBLE);
                            notifyDataSetChanged();
                        }
                    });
            
                }
            
                @Override
                public int getItemCount() {
                    return list.size();
                }
                @Override
                public int getItemViewType(int position) {
                    return position;
                }
            
                public class myViewHolder extends RecyclerView.ViewHolder {
                    ItemHomePopularProBinding binding;
                    public myViewHolder(ItemHomePopularProBinding binding) {
                        super(binding.getRoot());
                        this.binding = binding;
                    }
                }
            
                onItemClickListner onItemClickListner;
            
                public void setOnItemClickListner(HomeFragPopularProAdapter.onItemClickListner onItemClickListner) {
                    this.onItemClickListner = onItemClickListner;
                }
            
                public interface onItemClickListner{
                    void onClick(HomePopularProModel list);
                    void onCounterClick(HomePopularProModel list, String str);//pass your object types.
                }
            }

fragment_home.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="20dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="5dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="10dp"
            android:orientation="vertical"
            tools:context=".Fragments.HomeFragment">

            <com.smarteist.autoimageslider.SliderView
                android:id="@+id/autoImageSlider"
                android:layout_width="match_parent"
                android:layout_height="140dp"
                android:layout_marginStart="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginBottom="10dp"
                android:background="@color/white"
                app:sliderAnimationDuration="200"
                app:sliderAutoCycleDirection="back_and_forth"
                app:sliderIndicatorAnimationDuration="600"
                app:sliderIndicatorEnabled="true"
                app:sliderIndicatorOrientation="horizontal"
                app:sliderIndicatorPadding="5dp"
                app:sliderIndicatorRadius="3dp"
                app:sliderScrollTimeInSec="3"
                tools:ignore="MissingClass" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Popular"
                android:textColor="@color/black"
                android:textSize="15sp"
                android:textStyle="bold" />

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recyclerviewPopular"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:itemCount="10" />

            <TextView
                android:id="@+id/textLatest"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:text="Latest"
                android:textColor="@color/black"
                android:textSize="15sp"
                android:textStyle="bold" />

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recyclerviewLatest"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="8dp"
                android:paddingBottom="15dp" />
        </LinearLayout>
    </ScrollView>

    <include
        android:id="@+id/layoutCart"
        layout="@layout/activity_cart"
        android:visibility="visible"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />
</RelativeLayout>

enter image description here enter image description here



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source