0

Je récupère des données de la base de données Firebase à l'aide de FirebaseRecyclerAdapter. J'utilise un GridLayout pour afficher les données. Mes données sont triées par les touches push() dans la base de données Firebase, et je voudrais récupérer ces données dans l'ordre inverse. Je l'ai essayé d'utiliserComment implémenter la méthode override getItem() dans FirebaseRecyclerAdapter correctement

mLayoutManager.setReverseLayout(true); 
mLayoutManager.setStackFromEnd(true); 

Malheureusement, setStackFromEnd() n'est pas pris en charge pour GridLayout. Sans setStackFromEnd(), setReverseLayout() inverse l'ordre des données, mais laisse un espace en haut, ce qui est inacceptable.

Cependant, j'ai trouvé this réponse

@Override 
public Item getItem(int pos) { 
    return super.getItem(getCount() - 1 - pos); 
} 

d'une autre question (qui je pense peut travailler) et ont essayé de le mettre en œuvre. Toutefois, j'obtiens une erreur: 'ne peut pas résoudre l'élément de symbole' et 'tente d'utiliser un type de retour incompatible pour getItem (int)'.

Pour être honnête, je ne sais pas comment implémenter le getItem(). Si quelqu'un sait comment résoudre ceci, aidez-nous! Merci d'avance!

Objectif: d'implémenter le code getItem() pour tenter d'inverser les données push() extraites de la base de données Firebase de manière fluide (sans aucun espace en haut). En supposant que le code du lien fonctionne.

code:

public class Browse extends Fragment { 

    private FirebaseRecyclerAdapter<CategoryInformation, CategoryHolder> mFirebaseAdapter; 

    private GridLayoutManager mLayoutManager; 
    private RecyclerView rv; 
    private DatabaseReference mDatabase; 

    public Browse() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_browse, container, false); 
     rv = rootView.findViewById(R.id.rv_recycler_view_browse); 
     mLayoutManager = new GridLayoutManager(getContext(), 2); 
     rv.setLayoutManager(mLayoutManager); 

     mDatabase = FirebaseDatabase.getInstance().getReference().child("new"); 

     return rootView; 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     mFirebaseAdapter = new FirebaseRecyclerAdapter<CategoryInformation, CategoryHolder>(
       CategoryInformation.class, 
       R.layout.card_item_browse, 
       CategoryHolder.class, 
       mDatabase) { 

      @Override 
      public Item getItem(int pos) { 
       return super.getItem(getCount() - 1 - pos); 
      } 

      @Override 
      public void populateViewHolder(CategoryHolder holder, CategoryInformation chat, final int position) { 
Picasso.with(getContext()).load(chat.getImage()).into(holder.feed_image); 

       holder.rating.setText(chat.getRating()); 
      } 
     }; 
     rv.setAdapter(mFirebaseAdapter); 
    } 

    //ViewHolder for our Firebase UI 
    public static class CategoryHolder extends RecyclerView.ViewHolder{ 

     ImageView feed_image; 
     TextView rating; 
     View mView; 

     public CategoryHolder(View v) { 
      super(v); 
      feed_image = v.findViewById(R.id.feed_image); 
      rating = v.findViewById(R.id.rating); 
      mView = v; 
     } 
    } 
} 

Répondre

0

J'ai trouvé la réponse. C'était juste une erreur idiote. Item classe est en fait le modèle. Donc je l'ai renommé à mon nom de modèle CategoryInformation, et il a été corrigé!

@Override 
public CategoryInformation getItem(int pos) { 
    return super.getItem(getCount() - 1 - pos); 
}