Основная идея того, что я делаю:
Я настраиваю свой вид переработчика из моего фрагмента «Категории», который отображает изображение продукта, его название, его цену исчетчик, который при нажатии изменяет количество этого конкретного элемента.У меня есть глобальная переменная totalQTY, определенная в моем ProductRecyclerViewAdapter, которая хранит общее количество всех продуктов в сгенерированном представлении переработчика и отправляет данные в метод внутри моего фрагмента «Категории».
Чтоэто проблема, с которой я сталкиваюсь?
Когда я в первый раз прокручиваю свое представление рециркулятора, totalQTY, который ранее обновлялся нормально, сбрасывается в 0. Однако когда я поднимаюсь отсюда и потомснова прокрутите вниз время, totalQTY теперь увеличивается, как и должно быть, и никогда не сбрасывается.Короче говоря, сброс происходит только тогда, когда прокручивается представление рециркулятора в первый раз.
Мой класс ProductRecyclerViewAdapter
public class ProductRecyclerViewAdapter extends RecyclerView.Adapter<ProductRecyclerViewAdapter.ProductViewHolder>{
private Context context;
private List<Product> productList;
private CategoriesFragment fragment;
private int totalQTY;
private double totalPrice = 0;
public ProductRecyclerViewAdapter(Context context, List<Product> productList, CategoriesFragment fragment) {
this.context = context;
this.productList = productList;
this.fragment = fragment;
}
@NonNull
@Override
public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.product_recyclerview_list_item,viewGroup,false);
ProductViewHolder holder = new ProductViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final @NonNull ProductViewHolder prouctViewHolder, int i) {
final Product product = productList.get(i);
prouctViewHolder.pdtTitle.setText(product.getTitle());
prouctViewHolder.pdtPrice.setText("MRP Rs " + String.valueOf(product.getPrice()));
prouctViewHolder.pdtImageView.setImageDrawable(context.getResources().getDrawable(product.getImageId()));
totalQTY = Integer.parseInt(prouctViewHolder.counter.getText().toString()); //Initially 0
prouctViewHolder.qtyminus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int qty = Integer.parseInt(prouctViewHolder.counter.getText().toString());
if (qty > 0) {
qty--;
totalPrice = totalPrice - product.getPrice();
totalQTY--;
fragment.setCheckoutToolbarText(totalQTY,totalPrice);
if(totalQTY==0) {
fragment.makeCheckoutGone();
}
} else {
Toast.makeText(context, "Cannot have a negative quantity\nCAN YOU?", Toast.LENGTH_LONG).show();
}
prouctViewHolder.counter.setText(String.valueOf(qty));
}
});
prouctViewHolder.qtyplus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int qty = Integer.parseInt(prouctViewHolder.counter.getText().toString());
qty++;
totalPrice += product.getPrice();
totalQTY++
prouctViewHolder.counter.setText(String.valueOf(qty));
fragment.setCheckoutToolbarText(totalQTY,totalPrice);
fragment.makeCheckoutVisible();
}
});
}
@Override
public int getItemCount() {
return productList.size();
}
class ProductViewHolder extends RecyclerView.ViewHolder {
ImageView pdtImageView;
TextView pdtTitle, pdtPrice, counter;
Button qtyminus, qtyplus;
public ProductViewHolder(@NonNull View itemView) {
super(itemView);
pdtImageView = itemView.findViewById(R.id.product_imageView);
pdtTitle = itemView.findViewById(R.id.textViewTitle);
pdtPrice = itemView.findViewById(R.id.textViewPrice);
counter = itemView.findViewById(R.id.qty_counter);
qtyminus = itemView.findViewById(R.id.qty_minus);
qtyplus = itemView.findViewById(R.id.qty_plus);
}
}
Мой product_recycler_view_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="135dp"
android:background="@drawable/product_background"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp">
<ImageView
android:id="@+id/product_imageView"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentStart="true"
android:layout_marginStart="16dp"
android:layout_alignParentTop="true"
android:layout_marginTop="25dp"
android:scaleType="centerInside"
android:background="@null"/>
<TextView
android:id="@+id/textViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="16dp"
android:layout_marginStart="16dp"
android:layout_toEndOf="@id/product_imageView"
android:text="Banana"
android:fontFamily="@font/baloo"
android:textSize="20sp"
android:textColor="@color/colorAccent" />
<TextView
android:id="@+id/textViewPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textViewTitle"
android:layout_marginStart="16dp"
android:layout_toEndOf="@id/product_imageView"
android:text="Rs 120"
android:textStyle="bold"
android:textColor="@color/green"/>
<Button
android:id="@+id/qty_minus"
android:background="@null"
android:text="-"
android:textColor="@color/red"
android:textSize="20sp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_below="@+id/textViewPrice"
android:layout_toEndOf="@id/product_imageView"
android:layout_marginTop="16dp"/>
<TextView
android:id="@+id/qty_counter"
android:text="0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textViewPrice"
android:layout_toEndOf="@id/qty_minus"
android:layout_marginTop="26dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"/>
<Button
android:id="@+id/qty_plus"
android:background="@null"
android:text="+"
android:textColor="@color/red"
android:textSize="20sp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_below="@+id/textViewPrice"
android:layout_toEndOf="@id/qty_counter"
android:layout_marginTop="16dp"/>
</RelativeLayout>
</LinearLayout>
Ниже приведен метод внутри фрагмента категорий, который получает totalQTY из метода onBindViewHolder ProductRecyclerViewAdapter
public void setCheckoutToolbarText(int totalQTY, double totalPrice){
Log.i("totalQTY",Integer.toString(totalQTY));
}
В настоящее время я добавил 6 продуктов в свой список продуктов, и 4 отображаются на экране, остальные 2 отображаются при прокрутке вниз.Что я сделал для отладки, так это то, что я нажал на + счетчик каждого из 4 продуктов на экране по отдельности, поэтому totalQTY в журнале увеличился с 1 до 4.
Однако, когда я прокрутил вниз и нажал на5-й продукт, totalQTY сбрасывается в 0 внутри onBindViewHolder, обновляется по щелчку и отправляет 1 обратно в вышеуказанный метод вместо отправки 5. Затем я нажимаю на 6-м изображении, totalQTY становится 2. Затем я снова прокручиваю вверх икликнул по 1-м 4 продуктам, итого QTY стало 3,4,5,6.Затем, когда я снова прокрутил вниз, на этот раз totalQTY правильно показал 7,8 при нажатии на последние 2 продукта.
Следовательно, проблема, с которой я сталкиваюсь, возникает, только когда я прокручиваю вниз в первый раз ниже.
The Log.i
2019-07-03 10:11:32.311 17011-17011/com.example.gofresh I/totalQTY: 1
2019-07-03 10:11:34.150 17011-17011/com.example.gofresh I/totalQTY: 2
2019-07-03 10:11:35.996 17011-17011/com.example.gofresh I/totalQTY: 3
2019-07-03 10:11:39.659 17011-17011/com.example.gofresh I/totalQTY: 4
2019-07-03 10:11:41.015 17011-17017/com.example.gofresh I/example.gofres: Compiler allocated 4MB to compile void android.widget.TextView.<init>(android.content.Context, android.util.AttributeSet, int, int)
2019-07-03 10:11:41.956 17011-17011/com.example.gofresh I/totalQTY: 1
2019-07-03 10:11:51.176 17011-17011/com.example.gofresh I/totalQTY: 2
2019-07-03 10:11:53.421 17011-17011/com.example.gofresh I/totalQTY: 3
2019-07-03 10:11:56.142 17011-17011/com.example.gofresh I/totalQTY: 4
2019-07-03 10:11:57.337 17011-17011/com.example.gofresh I/totalQTY: 5
2019-07-03 10:11:58.545 17011-17011/com.example.gofresh I/totalQTY: 6
2019-07-03 10:11:59.902 17011-17011/com.example.gofresh I/totalQTY: 7
2019-07-03 10:12:01.352 17011-17011/com.example.gofresh I/totalQTY: 8