【发布时间】:2019-08-18 06:23:56
【问题描述】:
我正在为一个小项目使用 firebase 实时数据库。我们有一个来自单个部门的学生列表。目的是借钱给其他学生,我们保留记录。
我有用户身份验证用户 firebase 身份验证。我面临的问题是一旦用户添加更多条目,而不是加载实际列表,它会创建副本。
这是我在回收站视图中加载数据的代码。 私有 void loadtorecyclerview() {
databaseReference = FirebaseDatabase.getInstance().getReference("Transaction");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
readTransaction = snapshot.getValue(Transaction.class);
if (readTransaction.getSponsor_id().contentEquals(user.getUserId().toString())) {
read_data.add(readTransaction);
Log.e("log" , readTransaction.toString());
}
}
transactionAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
我在片段的 OnCreateView 中调用此方法。
这是向 firebase 添加新数据的代码。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String amount = editText.getText().toString();
setValue(amount);
//value published firebase
Log.e("amount" , amount);
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Transaction");
String key = databaseReference.push().getKey();
databaseReference.child(key).setValue(transaction_submitted);
// loadtorecyclerview();
popupWindow.dismiss();
}
});
这是事务适配器的代码。
public class TransactionAdapter extends RecyclerView.Adapter<TransactionAdapter.ViewHolder>{
Context context;
ArrayList<Transaction> data;
public TransactionAdapter(Context context, ArrayList<Transaction> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = (View) LayoutInflater.from(context).inflate(R.layout.single_item_sponsor_rv , parent ,false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.amount.setText(data.get(position).getAmount());
holder.department.setText(data.get(position).getDepartment());
holder.collector.setText(data.get(position).getCollector_name());
holder.published.setText(data.get(position).getPublished_at());
}
@Override
public int getItemCount() {
return data.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView published;
TextView department;
TextView amount;
TextView collector;
public ViewHolder(@NonNull View itemView) {
super(itemView);
published = itemView.findViewById(R.id.timestamp);
department = itemView.findViewById(R.id.department);
amount = itemView.findViewById(R.id.amount);
collector = itemView.findViewById(R.id.collector);
}
}
}
您可以在图像中看到 Transaction 中有三个条目,但是在加载时,它会复制它们并显示很多。
【问题讨论】:
-
适配器似乎有问题。请附上
TransactionAdapter类的代码。 -
@salmanwahed 请检查更新后的代码。
-
请检查答案,如果它解决了问题,请告诉我。
-
@salmanwahed 我用这个:read_data.clear(); transaction_adapter.notifydatasetchanged() 并且有效
标签: android firebase-realtime-database