1

如果我单击该按钮CHECKOUT,则会出现一个弹出窗口。在此弹出窗口中,您有机会中止交易。因此,如果您中止事务,则项目(法国火、水、汉堡)的所有值应再次为 0,如下图所示。现在,当我中止事务时,值将保持我之前配置它们的方式。你能帮我解决这个问题吗?

在此处输入图像描述

订单活动.java

package com.nfc.netvision;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;

import static android.widget.Toast.*;

public class OrderActivity extends AppCompatActivity implements OrderAdapter.TotalListener {

    RecyclerView recyclerView;
    ArrayList<ModelOrder> orderArrayList;
    TextView textView_order_price;
    TextView textView_order_count;
    Dialog epicDialog;
    Button btnCheckout;
    Button btnAbort;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order);

        recyclerView = findViewById(R.id.recyclerview_order_scroll);
        textView_order_price = findViewById(R.id.textView_order_price);
        textView_order_count = findViewById(R.id.textView_order_count);
        btnCheckout = (Button) findViewById(R.id.btnCheckout);


        orderArrayList = new ArrayList<>();
        orderArrayList.add(new ModelOrder(R.drawable.coke, "Coka Cola", "Eine Cola hält dich wach und schmeckt dazu.", "3",0));
        orderArrayList.add(new ModelOrder(R.drawable.fastfood, "Pommes", "Fritten für die Titten.", "5",0));
        orderArrayList.add(new ModelOrder(R.drawable.water, "Wasser", "Still und sanft, so mag ich es.", "5",0));
        orderArrayList.add(new ModelOrder(R.drawable.burger, "Burger", "Ach mir fällt nichts ein.", "10",0));

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        RecyclerView.LayoutManager recLiLayoutManager = layoutManager;

        recyclerView.setLayoutManager(recLiLayoutManager);

        OrderAdapter adapter = new OrderAdapter(this, orderArrayList, this);

        recyclerView.setAdapter(adapter);

        epicDialog = new Dialog(this);

        btnCheckout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showWaitingPopUp();


            }
        });



    }

    private void showWaitingPopUp() {
        epicDialog.setContentView(R.layout.order_popup_waiting);
        epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        btnAbort = (Button) epicDialog.findViewById(R.id.btnAbort);
        btnAbort.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               epicDialog.dismiss();
            }
        });
        epicDialog.show();
    }


    @Override
    public void onTotalChanged(String result) {
        NumberFormat n = NumberFormat.getCurrencyInstance(Locale.GERMANY);
        textView_order_price.setText( n.format(Integer.parseInt(result)));
    }

    @Override
    public void onCountChanged(String result) {
        textView_order_count.setText(result);

    }
}

OrderAdapter.java

package com.nfc.netvision;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;


import org.w3c.dom.Text;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;


public class OrderAdapter extends RecyclerView.Adapter<OrderAdapter.ViewHolder> {

    private int totalAmount;
    private int totalItems;
    private Context mContext;
    private ArrayList<ModelOrder> nList;

    private TotalListener listener;

    interface TotalListener{
        void onTotalChanged(String result);
        void onCountChanged(String result);

    }
    OrderAdapter(Context context, ArrayList<ModelOrder> list, TotalListener listener) {
        mContext = context;
        nList = list;
        this.listener = listener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.recyclerview_order_items, parent, false);

        ViewHolder viewHolder = new ViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

        final ModelOrder orderItem = nList.get(position);
        ImageView image = holder.item_image;
        final TextView name, place, price;
        name = holder.item_name;
        place = holder.item_place;
        price = holder.item_price;

        image.setImageResource(orderItem.getImage());

        name.setText(orderItem.getName());
        place.setText(orderItem.getPlace());
        price.setText(orderItem.getPrice());


        holder.order_item_minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(orderItem.getCounter() > 0) {
                    orderItem.setCounter(orderItem.getCounter()-1);
                    holder.order_item_count.setText("" + orderItem.getCounter());
                    calculatePrice(Integer.parseInt((String) price.getText()), false);
                    countItems(orderItem.getCounter(), false);

                }

            }
        });

        holder.order_item_plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(orderItem.getCounter() < 9) {
                    orderItem.setCounter(orderItem.getCounter() + 1);
                    holder.order_item_count.setText("" + orderItem.getCounter());
                    calculatePrice(Integer.parseInt((String) price.getText()), true);
                    countItems(orderItem.getCounter(), true);
                }
            }
        });




    }

    @Override
    public int getItemCount() {
        return nList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        ImageView item_image;
        TextView item_name, item_place, item_price,order_item_minus,order_item_count, order_item_plus;

        public ViewHolder(@NonNull View itemView) {

            super(itemView);
            item_image = itemView.findViewById(R.id.order_item_image);
            item_name = itemView.findViewById(R.id.order_item_name);
            item_place = itemView.findViewById(R.id.order_item_place);
            item_price = itemView.findViewById(R.id.order_item_price);
            order_item_minus = itemView.findViewById(R.id.order_item_minus);
            order_item_plus = itemView.findViewById(R.id.order_item_plus);
            order_item_count = itemView.findViewById(R.id.order_item_count);
        }
    }

    private void calculatePrice(int pPrice, boolean pUpDown) {
        if(pUpDown) {
            totalAmount = totalAmount + pPrice;
        }
        else {
            totalAmount = totalAmount - pPrice;
        }

        listener.onTotalChanged(totalAmount+ "");
    }

    private void countItems(int pCounter, boolean pUpDown){
        if (pUpDown){
            totalItems = totalItems + 1;
        }
        else{
            totalItems = totalItems - 1;
        }
        listener.onCountChanged(totalItems+ "");

    }


}
4

1 回答 1

0

它们保持原样,因为在您的中止按钮内,onClick您只需关闭对话框并且不更改列表值。

我建议遍历列表并将所有计数器设置为 0。

另外,不要忘记通知您RecyclerView您修改了某些内容,在这种情况下,您将所有计数器重置为 0。否则,您将看不到应用程序中的更改。

private void showWaitingPopUp() {
    epicDialog.setContentView(R.layout.order_popup_waiting);
    epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    btnAbort = epicDialog.findViewById(R.id.btnAbort);
    btnAbort.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // Set all orders count to 0
            for (ModelOrder modelOrder: orderArrayList) {
                modelOrder.setCounter(0);
            }
            // Notify RecyclerView about the changes
            adapter.notifyDataSetChanged();

            epicDialog.dismiss();
        }
    });
    epicDialog.show();
}

我注意到您没有将适配器作为全局变量,因此将其声明为:

public class OrderActivity extends AppCompatActivity implements OrderAdapter.TotalListener {

    // other variables

    // Change adapter variable to global
    OrderAdapter adapter;

    // ...



旁注:我还注意到您在OrderAdapter构造函数中两次传递了您的活动。

OrderAdapter adapter = new OrderAdapter(this, orderArrayList, this);

你可以简单地做:

OrderAdapter adapter = new OrderAdapter(this, orderArrayList);

然后在你的构造函数中:

OrderAdapter(Context context, ArrayList<ModelOrder> list) {
    mContext = context;
    nList = list;

    // You can simply cast the context to the listener
    listener = (TotalListener) context;
}



希望我的回答对您有所帮助,祝您编码愉快!


编辑:我在聊天中移动了对 OP 其他问题的回答。

于 2020-05-05T17:05:58.207 回答