1

私のデータベースに変更があった場合、私のフラグメントのビューを再作成し続けるこのリサイクルビューの解決方法には苦労しています。ここに私のリサイクルビューのための私のフラグメントは、私は(それが原因で私のreview.addのだと思うFirebaseのデータ - アンドロイドリサイクラのビュー再作成

fragment.java @Override

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) { 

      } 
     }); 
    } 

..ですレビュー)を提供します(冗長性)。私のデータベースに変更があり、この冗長性をどのように処理するのかわからない場合、リサイクラビューは別のビューを追加します。

いずれの代替ソリューションまたは提案も非常に高く評価されます:)。喜んで学ぶ:)。どうもありがとうございました。あなたはループのため、その前にonDataChange()メソッド内でごreview = new ArrayList<>();の宣言を移動する必要があり

答えて

1

は次のように起動します:

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) { 

     } 
    }); 
} 

はそれがお役に立てば幸いです。

+0

public int getItemCount(){return mReviews.size();} ありがとう、ありがとう:ありがとうございました。 – KoralReef

関連する問題