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;
}
}
}