【问题标题】:How to get value from recyclerview and sum it to get grand total of value in android studio如何从 recyclerview 中获取价值并将其相加以获得 android studio 中的总价值
【发布时间】:2020-07-17 16:26:27
【问题描述】:

所以我尝试从 Firebase RecycleView 中获取价格值并将其相加得到总和。但我不知道它是如何工作的

这是我的适配器

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

    private ArrayList<Status> listStatus;
    private Context context;
    String uid;



    public interface dataListener{
        void onDeleteData(Status data, int position);
    }

    dataListener listener;

    public StatusAdapter(ArrayList<Status> listStatus, Context context) {
        this.listStatus = listStatus;
        this.context = context;
        listener = (ProsesPesananActivity)context;
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        private TextView shopId, ukuran, total,status,image,cartTotal;
        private ImageView imageView;
        private LinearLayout ListItem;
        long sum;


        ViewHolder(View itemView) {
            super(itemView);
            //Menginisialisasi View-View yang terpasang pada layout RecyclerView kita
            shopId = itemView.findViewById(R.id.itemKey);
            ukuran = itemView.findViewById(R.id.itemUkuran);
            total = itemView.findViewById(R.id.itemTotal);
            status = itemView.findViewById(R.id.itemStatus);
            ListItem = itemView.findViewById(R.id.list_item);
            imageView = itemView.findViewById(R.id.RecStatusImage);





        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //Membuat View untuk Menyiapkan dan Memasang Layout yang Akan digunakan pada RecyclerView
        View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_status, parent, false);
        return new ViewHolder(V);
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
        //Mengambil Nilai/Value yenag terdapat pada RecyclerView berdasarkan Posisi Tertentu
        final String shopId = listStatus.get(position).getShopId();
        final String ukuran = listStatus.get(position).getUkuran();
        final String status = String.valueOf(listStatus.get(position).getStatus());
        final String total = String.valueOf(listStatus.get(position).getTotal());
        final String image = listStatus.get(position).getUrl();




        //Memasukan Nilai/Value kedalam View (TextView: shopId, ukuran, total)

        holder.shopId.setText("shopId: "+shopId);
        holder.ukuran.setText("ukuran: "+ukuran);
        holder.total.setText("total: "+total);
        holder.status.setText("status"+status);


    }

    private int grandTotal(ArrayList<Status> items){

        int totalPrice = 0;
        for(int i = 0 ; i < items.size(); i++) {
            totalPrice += items.get(i).getTotal();
        }

        return totalPrice;
    }


    @Override
    public int getItemCount() {
        //Menghitung Ukuran/Jumlah Data Yang Akan Ditampilkan Pada RecyclerView
        return listStatus.size();
    }

}

如您所见,我尝试将它与 totalPrice 方法相加,但是当我在 mainActivity 中调用此方法时它不起作用,因为它需要是静态方法,如果我使用静态方法,我无法获得任何数组。那么有什么办法可以实现吗?

【问题讨论】:

  • 创建一个可以通过实例调用的方法,并在调用notifydatasetchanged后立即通过实例调用。
  • 你能告诉我如何实现它吗?我是新来的。对不起
  • 一般情况下不能直接调用其他类的方法。但是,我对此有一个建议是创建一个返回 int 值的接口,当您完全获得总数时,您将在其中传递 grandTotal 值。因此,在 mainActivity.java 文件中实现您的接口方法。如需更多帮助,请告诉我。
  • 先生,您可以通过侦听器在主要活动中发送数据,您已经在 recyclerview 适配器中使用了 deleteData() 。与此相同,您可以在其中添加一个函数来传递项目总数,并在主活动中实现该接口以获取回调。

标签: java android firebase-realtime-database android-recyclerview


【解决方案1】:

你不能在 Adapter 中使用它,因为每次你滚动 recyclerview 总和都会改变。 您应该在将数据加载到适配器的 AsyncTask 中执行此操作。

【讨论】:

    【解决方案2】:

    您无法访问StatusAdapter 中的grandTotal 函数,因为您将其定义为private 修饰符。

    你应该做的就是像这样将grandTotal 函数更改为public 修饰符

        public int grandTotal(ArrayList<Status> items){
    
            int totalPrice = 0;
            for(int i = 0 ; i < items.size(); i++) {
                totalPrice += items.get(i).getTotal();
            }
    
            return totalPrice;
        }
    

    然后在你的MainActivity中,你可以简单地像这样调用这个方法

    int grandTotalPrice = statusAdapter.grandTotal(statusArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多