我很难解决这个回收器 View ,如果我的数据库发生变化,它会不断重新填充我的 fragment 中的 View 。这是我的回收站 View fragment ..
fragment .java @覆盖
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_reviews, container, false);
Toast.makeText(getContext(), "this is a review", Toast.LENGTH_SHORT).show();
databaseReference = FirebaseDatabase.getInstance().getReference();
firebaseAuth = FirebaseAuth.getInstance();
firebaseUser = firebaseAuth.getCurrentUser();
//RETRIEVE DATAS
loadEntries();
drAdapter = new reviewAdapter(review);
recyclerView = (RecyclerView) v.findViewById(R.id.reviewRecyvlerView);
rvLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(rvLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(drAdapter);
return v;
}
在我的 loadentries() 中
private void loadEntries(){
review = new ArrayList<>();
dbReference = FirebaseDatabase.getInstance().getReference().child("Review");
dbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot mySnapshot : dataSnapshot.getChildren()){
// System.out.println(dataSnapshot.getChildrenCount());
String userID = mySnapshot.getKey();
Review reviews = mySnapshot.getValue(Review.class);
String fname = (String) dataSnapshot.child(userID).child("firstname").getValue();
String lname = (String) dataSnapshot.child(userID).child("lastname").getValue();
review.setFName(fname);
review.setLName(lname);
review.add(reviews);
}
drAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我认为这是因为我的 review.add(reviews) 不断填充 fragment (冗余)。如果我的数据库中有任何更改并且我不知道如何处理这种冗余,回收站 View 会添加另一个 View 。
任何替代解决方案或建议将不胜感激:)。愿意学习 :)。非常感谢。
最佳答案
您需要移动您的 review = new ArrayList<>();
的声明在onDataChange()
里面for循环开始之前的方法是这样的:
private void loadEntries(){
dbReference = FirebaseDatabase.getInstance().getReference().child("Review");
dbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList review = new ArrayList<>();
for (DataSnapshot mySnapshot : dataSnapshot.getChildren()){
//System.out.println(dataSnapshot.getChildrenCount());
String userID = mySnapshot.getKey();
Review reviews = mySnapshot.getValue(Review.class);
String fname = (String) dataSnapshot.child(userID).child("firstname").getValue();
String lname = (String) dataSnapshot.child(userID).child("lastname").getValue();
review.setFName(fname);
review.setLName(lname);
review.add(reviews);
}
drAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
希望对您有所帮助。
关于android - 来自 Firebase 的数据 - android 回收器 View 重新填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45330040/