这是recyclerview的结果:
这是我正在使用的代码。这只检索图像中的数据
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);
}
}
}
但我需要这样的结果:
这是因为对于数据库集合中的每个文档,您都将其添加到费用列表中。您添加所有费用,然后将其添加到您的清单中。
...//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。