
The simple thing I would like to do (see picture)
Display a view with information coming from two different places in Firebase so that it works professionally by scrolling UP and DOWN
I have a list of films, and for each of them I would like the user to specify a rating and watch it
In the database, I created 2 structures to have a list of films on one side and ratings for each user on the other
Problem Using FirebaseRecyclerAdapter
, , , (), ( ), , () , . FirebaseRecyclerView?
viewHolders recycleView reset populateView() , . , , (. SetOnlistener populateView()
populateView , populateView() ( UP DOWN ).
/ ?
, ? ?
, populateView(), ?
, :
- viewHolders ?
- RecyclerView? parseSnapshot(), ...
- , ( , , ).
- , , firebase ( ) : " ".
FirebaseRecyclerAdapter
@Override
protected void populateViewHolder(final MovieViewHolder viewHolder, final Movie movie, final int position) {
String movieId = this.getRef(position).getKey();
viewHolder.showNoRating();
viewHolder.movieTitle.setText(movie.getTitle());
viewHolder.movieDescription.setText(movie.getDescription());
DatabaseReference ratingMovieRef = mDbRef.child(Constants.FIREBASE_LOCATION_RATINGS).child(currentUserId).child(movieId);
ratingQuoteRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
RatingMovie ratingMovie = dataSnapshot.getValue(RatingMovie.class);
Rating rating = Rating.NO_RATING;
if (ratingMovie != null) {
rating = Rating.valueOf(ratingMovie.getRating());
}
viewHolder.showActiveRating(rating);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
MovieViewHolder
public class QuoteViewHolder extends RecyclerView.ViewHolder {
public CardView cardView;
public TextView movieTitle;
public TextView movieDescription;
public ImageView ratingOneStar;
public ImageView ratingTwoStar;
public ImageView ratingThreeStar;
public QuoteViewHolder(View itemView) {
super(itemView);
movieTitle = (TextView)itemView.findViewById(R.id.movie_title);
movieDescription = (TextView)itemView.findViewById(R.id.movie_descr);
ratingOneStar = (ImageView)itemView.findViewById(R.id.rating_one);
ratingTwoStar = (ImageView)itemView.findViewById(R.id.rating_two);
ratingThreeStar = (ImageView)itemView.findViewById(R.id.rating_three);
}
public void showActiveRating(Rating rating){
if (rating.equals(Rating.ONE)) {
...
}
else if (rating.equals(Rating.TWO)) {
...
} else if (rating.equals(Rating.THREE)) {
...
}
public void initialiseNoRating(){
ratingOneStar.setColorFilter(ContextCompat.getColor(itemView.getContext(), R.color.light_grey));
ratingTwoStar.setColorFilter(....
ratingThreeStar.SetColorFilter(...
}