'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>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|


