如何使用firestore在android中的recyclerview上执行此操作

问题描述 投票:0回答:1

这是recyclerview的结果:

enter image description here

这是我正在使用的代码。这只检索图像中的数据

db.collection("Expenses")
    .whereEqualTo("Email",email)
    .whereGreaterThanOrEqualTo("Date",MonthFirstDate)
    .whereLessThanOrEqualTo("Date",TodayDate)
    .orderBy("Date")
    .get()
    .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>()                                            {
        @Override
        public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
            if (!queryDocumentSnapshots.isEmpty()){
                expensesArrayList.clear();
                List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
                for (DocumentSnapshot ds : list){
                    expenses expenses = ds.toObject(expenses.class);
                    expensesArrayList.add(expenses);
                }
                adapter.notifyDataSetChanged();
            }
        }
    })

recyclerview 适配器代码

import java.util.ArrayList;

public class expensesAdapter extends RecyclerView.Adapter<expensesAdapter.expHolder> {

    private ArrayList<expenses> expensesArrayList;
    private Context context;


    public expensesAdapter(ArrayList<expenses> expensesArrayList, Context context) {
        this.expensesArrayList = expensesArrayList;
        this.context = context;
    }

    @NonNull
    @Override
    public expensesAdapter.expHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(R.layout.expensesitems,parent,false);
        return new expHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull expensesAdapter.expHolder holder, int position) {
        expenses expenses = expensesArrayList.get(position);
        holder.catName.setText(expenses.getCategory());
        holder.catAmont.setText(expenses.getAmount());
    }

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

    class expHolder extends RecyclerView.ViewHolder {

        private final TextView catName,catAmont;

        public expHolder(@NonNull View itemView) {
            super(itemView);

            catName = itemView.findViewById(R.id.expCategory);
            catAmont =itemView.findViewById(R.id.expAmount);
        }
    }
}

但我需要这样的结果:

java android google-cloud-firestore android-recyclerview
1个回答
0
投票

这是因为对于数据库集合中的每个文档,您都将其添加到费用列表中。您添加所有费用,然后将其添加到您的清单中。

...//other code

expensesArrayList.clear();
List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
int totalExpense = 0;
for (DocumentSnapshot ds : list){
    expenses expenses = ds.toObject(expenses.class);
    totalExpense = expenses.getAmount();
}

// create a new Expense here, this will depend how have you written the constructor
expenses finalExpense = new expenses("Bill", totalExpense);
expensesArrayList.add(finalExpense);
adapter.notifyDataSetChanged();

...// other code

但是您必须决定将什么值设置为总费用的类别名称,在示例中我将其设置为 Bill。

© www.soinside.com 2019 - 2024. All rights reserved.