代码之家  ›  专栏  ›  技术社区  ›  ben

如何在FirebaseRecyclerAdapter中正确实现override getItem()方法

  •  0
  • ben  · 技术社区  · 7 年前

    我正在使用FirebaseRecyclerAdapter从firebase数据库检索数据。我使用GridLayout来显示数据。我的数据是按firebase数据库中的push()键排序的,我希望以相反的顺序检索这些数据。我试过使用

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

    setStackFromEnd() GridLayout不支持。没有 setStackFromEnd() , setReverseLayout()

    然而,我发现 this 答复

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

    试图为getItem(int)使用不兼容的返回类型

    老实说,我不知道如何实施 getItem()

    目标: 实现getItem()代码,尝试顺利反转从firebase数据库检索到的push()数据(顶部没有任何间隙)。假设链接中的代码有效。

    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;
            }
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   ben    7 年前

    Item CategoryInformation ,它被修复了!

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